reverse_route.cc sort.cc stackfilter.cc trackfilter.cc discard.cc \
nukedata.cc interpolate.cc transform.cc height.cc swapdata.cc bend.cc \
validate.cc
+FILTER_HEADERS = $$FILTERS
+FILTER_HEADERS ~= s/\.cc/.h/g
SHAPE=shapelib/shpopen.c shapelib/dbfopen.c shapelib/safileio.c
gbser_private.h \
gbversion.h \
grtcirc.h \
- height.h \
+ heightgrid.h \
holux.h \
inifile.h \
jeeps/garminusb.h \
src/core/xmlstreamwriter.h \
src/core/xmltag.h
+HEADERS += $$FILTER_HEADERS
+
INCLUDEPATH += zlib
load(configure)
-$(QMAKE) -v
# Machine generated from here down.
-alan.o: alan.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h
-an1.o: an1.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h an1sym.h
+alan.o: alan.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h
+an1.o: an1.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h an1sym.h
arcdist.o: arcdist.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h filterdefs.h \
- grtcirc.h
-bcr.o: bcr.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h csv_util.h \
- garmin_tables.h cet_util.h
-bend.o: bend.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h filterdefs.h grtcirc.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ arcdist.h filter.h filterdefs.h grtcirc.h
+bcr.o: bcr.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
+ csv_util.h garmin_tables.h
+bend.o: bend.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h bend.h filter.h \
+ filterdefs.h grtcirc.h
brauniger_iq.o: brauniger_iq.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- gbser.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h gbser.h
bushnell.o: bushnell.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
bushnell_trl.o: bushnell_trl.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
-cet.o: cet.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
+cet.o: cet.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h
cet_util.o: cet_util.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
- cet/ansi_x3_4_1968.h cet/cp1252.h cet/iso_8859_8.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ cet_util.h src/core/logging.h cet/ansi_x3_4_1968.h cet/cp1252.h \
+ cet/iso_8859_8.h
compegps.o: compegps.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
- csv_util.h jeeps/gpsmath.h jeeps/gpsport.h
-cst.o: cst.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h cet_util.h strptime.h
-csv_util.o: csv_util.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
- csv_util.h garmin_fs.h jeeps/gps.h jeeps/gpsport.h jeeps/gpsdevice.h \
- jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
- jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
- jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
- grtcirc.h src/core/logging.h strptime.h xcsv_tokens.gperf
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ cet_util.h csv_util.h jeeps/gpsmath.h jeeps/gpsport.h
+cst.o: cst.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h
+csv_util.o: csv_util.cc csv_util.h queue.h defs.h config.h zlib/zlib.h \
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h garmin_fs.h jeeps/gps.h jeeps/../defs.h \
+ jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gps.h jeeps/gpssend.h \
+ jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
+ jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
+ jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h grtcirc.h \
+ jeeps/gpsmath.h src/core/logging.h strptime.h xcsv_tokens.gperf
delgpl.o: delgpl.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
destinator.o: destinator.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- cet_util.h garmin_fs.h jeeps/gps.h jeeps/gpsport.h jeeps/gpsdevice.h \
- jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
- jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
- jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
- strptime.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h cet_util.h garmin_fs.h jeeps/gps.h jeeps/../defs.h \
+ jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gps.h jeeps/gpssend.h \
+ jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
+ jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
+ jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h strptime.h
dg-100.o: dg-100.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h
discard.o: discard.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h filterdefs.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ discard.h filter.h filterdefs.h
dmtlog.o: dmtlog.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
- jeeps/gpsport.h xmlgeneric.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ jeeps/gpsmath.h jeeps/gpsport.h xmlgeneric.h
duplicate.o: duplicate.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- filterdefs.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h duplicate.h filter.h filterdefs.h
easygps.o: easygps.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
energympro.o: energympro.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
enigma.o: enigma.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h
-exif.o: exif.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h garmin_tables.h \
- jeeps/gpsmath.h jeeps/gpsport.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+exif.o: exif.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h garmin_tables.h \
+ jeeps/gpsmath.h jeeps/gpsport.h
explorist_ini.o: explorist_ini.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- explorist_ini.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h explorist_ini.h
f90g_track.o: f90g_track.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
fatal.o: fatal.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
filter_vecs.o: filter_vecs.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- filterdefs.h gbversion.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h arcdist.h filter.h filterdefs.h grtcirc.h bend.h \
+ discard.h duplicate.h height.h interpolate.h nukedata.h polygon.h \
+ position.h radius.h reverse_route.h smplrout.h sort.h stackfilter.h \
+ swapdata.h trackfilter.h strptime.h xmlgeneric.h transform.h validate.h \
+ gbversion.h
formspec.o: formspec.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
g7towin.o: g7towin.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h csv_util.h \
- cet_util.h garmin_fs.h jeeps/gps.h jeeps/gpsport.h jeeps/gpsdevice.h \
- jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
- jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
- jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
- garmin_tables.h strptime.h
-garmin.o: garmin.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
- grtcirc.h jeeps/gps.h jeeps/gpsport.h jeeps/gpsdevice.h \
- jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
- jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
- jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
- jeeps/gpsserial.h garmin_tables.h garmin_fs.h garmin_device_xml.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ cet_util.h csv_util.h garmin_fs.h jeeps/gps.h jeeps/../defs.h \
+ jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gps.h jeeps/gpssend.h \
+ jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
+ jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
+ jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h garmin_tables.h \
+ jeeps/gpsmath.h strptime.h
+garmin.o: garmin.cc cet_util.h config.h cet.h defs.h queue.h zlib/zlib.h \
+ zlib/zconf.h config.h gbfile.h inifile.h session.h src/core/datetime.h \
+ garmin_device_xml.h garmin_fs.h jeeps/gps.h jeeps/../defs.h \
+ jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gps.h jeeps/gpssend.h \
+ jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
+ jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
+ jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h garmin_tables.h \
+ grtcirc.h jeeps/gpsserial.h
garmin_device_xml.o: garmin_device_xml.cc defs.h config.h queue.h \
- zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h session.h \
- src/core/datetime.h xmlgeneric.h garmin_device_xml.h
+ zlib/zlib.h zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h garmin_device_xml.h xmlgeneric.h
garmin_fit.o: garmin_fit.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
garmin_fs.o: garmin_fs.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- cet_util.h garmin_fs.h jeeps/gps.h jeeps/gpsport.h jeeps/gpsdevice.h \
- jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
- jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
- jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
- garmin_tables.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h cet_util.h garmin_fs.h jeeps/gps.h jeeps/../defs.h \
+ jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gps.h jeeps/gpssend.h \
+ jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
+ jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
+ jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h garmin_tables.h
garmin_gpi.o: garmin_gpi.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- cet_util.h jeeps/gpsmath.h jeeps/gpsport.h garmin_fs.h jeeps/gps.h \
- jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
- jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
- jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
- garmin_gpi.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h cet_util.h garmin_fs.h jeeps/gps.h jeeps/../defs.h \
+ jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gps.h jeeps/gpssend.h \
+ jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
+ jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
+ jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h garmin_gpi.h \
+ jeeps/gpsmath.h
garmin_tables.o: garmin_tables.cc garmin_tables.h defs.h config.h queue.h \
- zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h session.h \
- src/core/datetime.h src/core/logging.h jeeps/gpsmath.h jeeps/gpsport.h
+ zlib/zlib.h zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h jeeps/gpsmath.h jeeps/gpsport.h src/core/logging.h
garmin_txt.o: garmin_txt.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- cet_util.h csv_util.h garmin_fs.h jeeps/gps.h jeeps/gpsport.h \
- jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
- jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
- jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
- jeeps/gpsproj.h garmin_tables.h grtcirc.h strptime.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h cet_util.h csv_util.h garmin_fs.h jeeps/gps.h \
+ jeeps/../defs.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gps.h \
+ jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
+ jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
+ jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
+ garmin_tables.h grtcirc.h jeeps/gpsmath.h strptime.h
garmin_xt.o: garmin_xt.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
gbfile.o: gbfile.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- src/core/logging.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ src/core/logging.h
gbser.o: gbser.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h \
- gbser_private.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h \
+ gbser_private.h
gbser_posix.o: gbser_posix.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- gbser.h gbser_private.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h gbser.h gbser_private.h
gbsleep.o: gbsleep.cc config.h
-gdb.o: gdb.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h cet_util.h csv_util.h \
- garmin_fs.h jeeps/gps.h jeeps/gpsport.h jeeps/gpsdevice.h \
- jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
- jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
- jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
- garmin_tables.h grtcirc.h
-geo.o: geo.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h src/core/file.h
+gdb.o: gdb.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
+ csv_util.h garmin_fs.h jeeps/gps.h jeeps/../defs.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gps.h jeeps/gpssend.h jeeps/gpsread.h \
+ jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h \
+ jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h \
+ jeeps/gpsinput.h jeeps/gpsproj.h garmin_tables.h grtcirc.h \
+ jeeps/gpsmath.h
+geo.o: geo.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h src/core/file.h \
+ defs.h
+geojson.o: geojson.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ src/core/file.h defs.h
ggv_bin.o: ggv_bin.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
ggv_log.o: ggv_log.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h grtcirc.h \
- jeeps/gpsmath.h jeeps/gpsport.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ grtcirc.h jeeps/gpsmath.h jeeps/gpsport.h
ggv_ovl.o: ggv_ovl.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
- grtcirc.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ cet_util.h grtcirc.h
globals.o: globals.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h gbversion.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ gbversion.h
globalsat_sport.o: globalsat_sport.cc defs.h config.h queue.h zlib/zlib.h \
zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h gbser.h
glogbook.o: glogbook.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h \
- src/core/file.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ src/core/file.h defs.h xmlgeneric.h
gnav_trl.o: gnav_trl.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
googledir.o: googledir.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- xmlgeneric.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h xmlgeneric.h
gopal.o: gopal.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
- csv_util.h strptime.h jeeps/gpsmath.h jeeps/gpsport.h grtcirc.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ cet_util.h csv_util.h grtcirc.h jeeps/gpsmath.h jeeps/gpsport.h \
+ strptime.h
gpssim.o: gpssim.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
gpsutil.o: gpsutil.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
- magellan.h
-gpx.o: gpx.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h cet_util.h garmin_fs.h \
- jeeps/gps.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
- jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
- jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
- jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h garmin_tables.h \
- src/core/logging.h src/core/file.h src/core/xmlstreamwriter.h \
- src/core/xmltag.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ cet_util.h magellan.h
+gpx.o: gpx.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
+ garmin_fs.h jeeps/gps.h jeeps/../defs.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gps.h jeeps/gpssend.h jeeps/gpsread.h \
+ jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h \
+ jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h \
+ jeeps/gpsinput.h jeeps/gpsproj.h garmin_tables.h src/core/file.h defs.h \
+ src/core/logging.h src/core/xmlstreamwriter.h src/core/xmltag.h
grtcirc.o: grtcirc.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h grtcirc.h
-gtm.o: gtm.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
- jeeps/gpsport.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ grtcirc.h
+gtm.o: gtm.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
+ jeeps/gpsport.h
gtrnctr.o: gtrnctr.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ xmlgeneric.h
height.o: height.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h filterdefs.h \
- height.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ filterdefs.h filter.h height.h heightgrid.h
hiketech.o: hiketech.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h \
- src/core/xmlstreamwriter.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ src/core/xmlstreamwriter.h xmlgeneric.h
holux.o: holux.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h holux.h
-html.o: html.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
- jeeps/gpsport.h src/core/xmltag.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h holux.h
+html.o: html.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
+ jeeps/gpsport.h src/core/xmltag.h
humminbird.o: humminbird.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
-igc.o: igc.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h cet_util.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
+igc.o: igc.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h
ignrando.o: ignrando.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h
-igo8.o: igo8.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h cet_util.h
-ik3d.o: ik3d.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ xmlgeneric.h
+igo8.o: igo8.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h
+ik3d.o: ik3d.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h
inifile.o: inifile.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
internal_styles.o: internal_styles.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
interpolate.o: interpolate.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- filterdefs.h grtcirc.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h filterdefs.h filter.h grtcirc.h interpolate.h
itracku.o: itracku.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h
-jeeps/gpsapp.o: jeeps/gpsapp.cc jeeps/gps.h jeeps/../defs.h config.h \
- queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h session.h \
- src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
- jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
- jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
- jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h jeeps/garminusb.h \
- jeeps/gpsusbint.h jeeps/gpsserial.h
-jeeps/gpscom.o: jeeps/gpscom.cc jeeps/gps.h jeeps/../defs.h config.h \
- queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h session.h \
- src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
- jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
- jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
- jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h
+jeeps/gpsapp.o: jeeps/gpsapp.cc jeeps/gps.h jeeps/../defs.h \
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h jeeps/garminusb.h jeeps/gpsserial.h jeeps/gpsusbint.h
+jeeps/gpscom.o: jeeps/gpscom.cc jeeps/gps.h jeeps/../defs.h \
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h
jeeps/gpsdevice.o: jeeps/gpsdevice.cc jeeps/gps.h jeeps/../defs.h \
- config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h \
- session.h src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h \
- jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
- jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
- jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
- jeeps/gpsserial.h
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h jeeps/gpsserial.h
jeeps/gpsdevice_ser.o: jeeps/gpsdevice_ser.cc jeeps/gps.h jeeps/../defs.h \
- config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h \
- session.h src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h \
- jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
- jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
- jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
- jeeps/gpsserial.h
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h jeeps/gpsserial.h
jeeps/gpsdevice_usb.o: jeeps/gpsdevice_usb.cc jeeps/gps.h jeeps/../defs.h \
- config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h \
- session.h src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h \
- jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
- jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
- jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
- jeeps/garminusb.h jeeps/gpsusbint.h jeeps/gpsusbcommon.h
-jeeps/gpslibusb.o: jeeps/gpslibusb.cc config.h mac/libusb/usb.h \
- jeeps/gps.h jeeps/../defs.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h jeeps/gpsport.h \
- jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
- jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
- jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
- jeeps/gpsproj.h jeeps/garminusb.h jeeps/gpsusbcommon.h \
- jeeps/../garmin_device_xml.h
-jeeps/gpsmath.o: jeeps/gpsmath.cc jeeps/gps.h jeeps/../defs.h config.h \
- queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h session.h \
- src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
- jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
- jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
- jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h jeeps/gpsdatum.h
-jeeps/gpsmem.o: jeeps/gpsmem.cc jeeps/gps.h jeeps/../defs.h config.h \
- queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h session.h \
- src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
- jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
- jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
- jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h
-jeeps/gpsprot.o: jeeps/gpsprot.cc jeeps/gps.h jeeps/../defs.h config.h \
- queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h session.h \
- src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
- jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
- jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
- jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h
-jeeps/gpsread.o: jeeps/gpsread.cc jeeps/gps.h jeeps/../defs.h config.h \
- queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h session.h \
- src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
- jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
- jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
- jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h jeeps/gpsserial.h
-jeeps/gpsrqst.o: jeeps/gpsrqst.cc jeeps/gps.h jeeps/../defs.h config.h \
- queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h session.h \
- src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
- jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
- jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
- jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h
-jeeps/gpssend.o: jeeps/gpssend.cc jeeps/gps.h jeeps/../defs.h config.h \
- queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h session.h \
- src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
- jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
- jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
- jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h jeeps/gpsserial.h
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h jeeps/garminusb.h jeeps/gpsusbcommon.h jeeps/gpsusbint.h
+jeeps/gpslibusb.o: jeeps/gpslibusb.cc config.h jeeps/gps.h \
+ jeeps/../defs.h jeeps/../config.h jeeps/../queue.h zlib/zlib.h \
+ zlib/zconf.h jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h \
+ jeeps/../inifile.h jeeps/../session.h jeeps/../src/core/datetime.h \
+ jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h \
+ jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h \
+ jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h \
+ jeeps/gpsinput.h jeeps/gpsproj.h jeeps/garminusb.h jeeps/gpsusbcommon.h \
+ jeeps/../garmin_device_xml.h
+jeeps/gpsmath.o: jeeps/gpsmath.cc jeeps/gps.h jeeps/../defs.h \
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h jeeps/gpsdatum.h
+jeeps/gpsmem.o: jeeps/gpsmem.cc jeeps/gps.h jeeps/../defs.h \
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h
+jeeps/gpsprot.o: jeeps/gpsprot.cc jeeps/gps.h jeeps/../defs.h \
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h
+jeeps/gpsread.o: jeeps/gpsread.cc jeeps/gps.h jeeps/../defs.h \
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h jeeps/gpsserial.h
+jeeps/gpsrqst.o: jeeps/gpsrqst.cc jeeps/gps.h jeeps/../defs.h \
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h
+jeeps/gpssend.o: jeeps/gpssend.cc jeeps/gps.h jeeps/../defs.h \
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h jeeps/gpsserial.h
jeeps/gpsserial.o: jeeps/gpsserial.cc jeeps/gps.h jeeps/../defs.h \
- config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h \
- session.h src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h \
- jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
- jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
- jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
- jeeps/gpsserial.h jeeps/../gbser.h gbser_posix.h
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h jeeps/../gbser.h jeeps/gpsserial.h gbser_posix.h
jeeps/gpsusbcommon.o: jeeps/gpsusbcommon.cc jeeps/gps.h jeeps/../defs.h \
- config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h \
- session.h src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h \
- jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
- jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
- jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
- jeeps/garminusb.h jeeps/gpsusbcommon.h
-jeeps/gpsusbread.o: jeeps/gpsusbread.cc jeeps/gps.h jeeps/../defs.h \
- config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h \
- session.h src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h \
- jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
- jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
- jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
- jeeps/garminusb.h jeeps/gpsusbint.h
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h jeeps/garminusb.h jeeps/gpsusbcommon.h
+jeeps/gpsusbread.o: jeeps/gpsusbread.cc jeeps/garminusb.h \
+ jeeps/gpsdevice.h jeeps/gps.h jeeps/../defs.h jeeps/../config.h \
+ jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h jeeps/../gbfile.h \
+ jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h jeeps/../session.h \
+ jeeps/../src/core/datetime.h jeeps/gpsport.h jeeps/gpssend.h \
+ jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
+ jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
+ jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h jeeps/gpsusbint.h
jeeps/gpsusbsend.o: jeeps/gpsusbsend.cc jeeps/gps.h jeeps/../defs.h \
- config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h \
- session.h src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h \
- jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
- jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
- jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
- jeeps/garminusb.h jeeps/gpsusbint.h
-jeeps/jgpsutil.o: jeeps/jgpsutil.cc jeeps/gps.h jeeps/../defs.h config.h \
- queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h session.h \
- src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
- jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
- jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
- jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h jeeps/garminusb.h jeeps/gpsusbint.h
+jeeps/jgpsutil.o: jeeps/jgpsutil.cc jeeps/gps.h jeeps/../defs.h \
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h
jogmap.o: jogmap.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h garmin_tables.h \
- jeeps/gpsmath.h jeeps/gpsport.h xmlgeneric.h
-jtr.o: jtr.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h csv_util.h
-kml.o: kml.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h grtcirc.h \
- src/core/file.h src/core/xmlstreamwriter.h src/core/xmltag.h
-lmx.o: lmx.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ garmin_tables.h jeeps/gpsmath.h jeeps/gpsport.h xmlgeneric.h
+jtr.o: jtr.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h csv_util.h
+kml.o: kml.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h grtcirc.h \
+ src/core/file.h defs.h src/core/xmlstreamwriter.h src/core/xmltag.h \
+ xmlgeneric.h
+lmx.o: lmx.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h
lowranceusr.o: lowranceusr.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
lowranceusr4.o: lowranceusr4.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
-mac/libusb/darwin.o: mac/libusb/darwin.c config.h mac/libusb/usbi.h \
- mac/libusb/usb.h mac/libusb/error.h
-mac/libusb/descriptors.o: mac/libusb/descriptors.c mac/libusb/usbi.h \
- mac/libusb/usb.h mac/libusb/error.h
-mac/libusb/error.o: mac/libusb/error.c mac/libusb/usb.h \
- mac/libusb/error.h
-mac/libusb/usb.o: mac/libusb/usb.c mac/libusb/usbi.h mac/libusb/usb.h \
- mac/libusb/error.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
maggeo.o: maggeo.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h csv_util.h \
- xmlgeneric.h magellan.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ csv_util.h magellan.h xmlgeneric.h
magproto.o: magproto.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h magellan.h \
- gbser.h explorist_ini.h
-main.o: main.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h filterdefs.h cet_util.h \
- csv_util.h src/core/usasciicodec.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ explorist_ini.h gbser.h magellan.h
+main.o: main.cc cet.h cet_util.h config.h defs.h queue.h zlib/zlib.h \
+ zlib/zconf.h config.h gbfile.h inifile.h session.h src/core/datetime.h \
+ csv_util.h filterdefs.h filter.h src/core/file.h defs.h \
+ src/core/usasciicodec.h
mapasia.o: mapasia.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
mapbar_track.o: mapbar_track.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
mapfactor.o: mapfactor.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- src/core/file.h src/core/xmlstreamwriter.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h src/core/file.h defs.h src/core/xmlstreamwriter.h
mapsend.o: mapsend.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h mapsend.h \
- magellan.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ magellan.h mapsend.h
mapsource.o: mapsource.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- garmin_tables.h jeeps/gpsmath.h jeeps/gpsport.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h garmin_tables.h jeeps/gpsmath.h jeeps/gpsport.h
mkshort.o: mkshort.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h
-mmo.o: mmo.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ cet_util.h
+mmo.o: mmo.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h
mtk_locus.o: mtk_locus.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- gbser.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h gbser.h
mtk_logger.o: mtk_logger.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- gbser.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h gbser.h
mynav.o: mynav.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
navicache.o: navicache.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- cet_util.h src/core/file.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h cet_util.h src/core/file.h defs.h
naviguide.o: naviguide.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- csv_util.h jeeps/gpsmath.h jeeps/gpsport.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h csv_util.h jeeps/gpsmath.h jeeps/gpsport.h
navilink.o: navilink.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h \
- jeeps/gpsmath.h jeeps/gpsport.h navilink.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h \
+ jeeps/gpsmath.h jeeps/gpsport.h navilink.h
navitel.o: navitel.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
- jeeps/gpsport.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ jeeps/gpsmath.h jeeps/gpsport.h
netstumbler.o: netstumbler.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- cet_util.h csv_util.h
-nmea.o: nmea.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h cet_util.h gbser.h \
- strptime.h jeeps/gpsmath.h jeeps/gpsport.h
-nmn4.o: nmn4.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h cet_util.h csv_util.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h cet_util.h csv_util.h
+nmea.o: nmea.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
+ gbser.h jeeps/gpsmath.h jeeps/gpsport.h src/core/logging.h strptime.h
+nmn4.o: nmn4.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
+ csv_util.h
nukedata.o: nukedata.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h filterdefs.h
-osm.o: osm.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h
-ozi.o: ozi.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h cet_util.h csv_util.h \
- jeeps/gpsmath.h jeeps/gpsport.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ filterdefs.h filter.h nukedata.h
+osm.o: osm.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h
+ozi.o: ozi.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
+ csv_util.h jeeps/gpsmath.h jeeps/gpsport.h
parse.o: parse.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
- jeeps/gpsport.h strptime.h
-pcx.o: pcx.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h garmin_tables.h \
- cet_util.h csv_util.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ jeeps/gpsmath.h jeeps/gpsport.h
+pcx.o: pcx.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
+ csv_util.h garmin_tables.h
pocketfms_bc.o: pocketfms_bc.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
pocketfms_fp.o: pocketfms_fp.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- xmlgeneric.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h xmlgeneric.h
pocketfms_wp.o: pocketfms_wp.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- csv_util.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h csv_util.h
polygon.o: polygon.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h filterdefs.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ filterdefs.h filter.h polygon.h
position.o: position.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h filterdefs.h \
- grtcirc.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ filterdefs.h filter.h grtcirc.h position.h
psitrex.o: psitrex.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h garmin_tables.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ garmin_tables.h
queue.o: queue.cc queue.h
radius.o: radius.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h filterdefs.h \
- grtcirc.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ filterdefs.h filter.h grtcirc.h radius.h
random.o: random.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h garmin_fs.h \
- jeeps/gps.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
- jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
- jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
- jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ garmin_fs.h jeeps/gps.h jeeps/../defs.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gps.h jeeps/gpssend.h jeeps/gpsread.h \
+ jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h \
+ jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h \
+ jeeps/gpsinput.h jeeps/gpsproj.h jeeps/gpsmath.h
raymarine.o: raymarine.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- cet_util.h csv_util.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h cet_util.h csv_util.h
reverse_route.o: reverse_route.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- filterdefs.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h filterdefs.h filter.h reverse_route.h
rgbcolors.o: rgbcolors.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
route.o: route.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h grtcirc.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ grtcirc.h
saroute.o: saroute.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h grtcirc.h
-sbn.o: sbn.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h navilink.h
-sbp.o: sbp.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h navilink.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ grtcirc.h
+sbn.o: sbn.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h navilink.h
+sbp.o: sbp.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h navilink.h
session.o: session.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
shape.o: shape.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- shapelib/shapefil.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ shapelib/shapefil.h
shapelib/dbfopen.o: shapelib/dbfopen.c shapelib/shapefil.h
shapelib/safileio.o: shapelib/safileio.c shapelib/shapefil.h
shapelib/shpopen.o: shapelib/shpopen.c shapelib/shapefil.h
skyforce.o: skyforce.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
skytraq.o: skytraq.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h
smplrout.o: smplrout.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h filterdefs.h \
- grtcirc.h
-sort.o: sort.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h filterdefs.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ filterdefs.h filter.h grtcirc.h smplrout.h
+sort.o: sort.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h filterdefs.h \
+ filter.h sort.h
src/core/usasciicodec.o: src/core/usasciicodec.cc src/core/usasciicodec.h
src/core/xmlstreamwriter.o: src/core/xmlstreamwriter.cc \
- src/core/xmlstreamwriter.h
+ src/core/xmlstreamwriter.h
+src/core/ziparchive.o: src/core/ziparchive.cc src/core/ziparchive.h \
+ defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h gbfile.h \
+ defs.h cet.h inifile.h session.h src/core/datetime.h \
+ zlib/contrib/minizip/zip.h zlib/contrib/minizip/ioapi.h \
+ src/core/logging.h
stackfilter.o: stackfilter.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- filterdefs.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h filterdefs.h filter.h stackfilter.h
stmsdf.o: stmsdf.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
- csv_util.h strptime.h jeeps/gpsmath.h jeeps/gpsport.h grtcirc.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ cet_util.h csv_util.h jeeps/gpsmath.h jeeps/gpsport.h grtcirc.h
stmwpp.o: stmwpp.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h csv_util.h \
- cet_util.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ csv_util.h cet_util.h
strptime.o: strptime.c config.h strptime.h
subrip.o: subrip.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
swapdata.o: swapdata.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h filterdefs.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ filterdefs.h filter.h swapdata.h
tef_xml.o: tef_xml.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ xmlgeneric.h
teletype.o: teletype.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h
-text.o: text.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
- jeeps/gpsport.h src/core/xmltag.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+text.o: text.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
+ jeeps/gpsport.h src/core/xmltag.h
tiger.o: tiger.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
- csv_util.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ cet_util.h csv_util.h
tmpro.o: tmpro.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
- csv_util.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ cet_util.h csv_util.h
tomtom.o: tomtom.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h
-tpg.o: tpg.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
- jeeps/gpsport.h
-tpo.o: tpo.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
- jeeps/gpsport.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+tpg.o: tpg.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
+ jeeps/gpsport.h
+tpo.o: tpo.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
+ jeeps/gpsport.h
trackfilter.o: trackfilter.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- filterdefs.h grtcirc.h strptime.h xmlgeneric.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h filterdefs.h filter.h grtcirc.h strptime.h \
+ trackfilter.h xmlgeneric.h
transform.o: transform.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- filterdefs.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h filterdefs.h filter.h transform.h
unicsv.o: unicsv.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
- csv_util.h garmin_fs.h jeeps/gps.h jeeps/gpsport.h jeeps/gpsdevice.h \
- jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
- jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
- jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
- garmin_tables.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ cet_util.h csv_util.h garmin_fs.h jeeps/gps.h jeeps/../defs.h \
+ jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gps.h jeeps/gpssend.h \
+ jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
+ jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
+ jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h garmin_tables.h \
+ jeeps/gpsmath.h src/core/logging.h
units.o: units.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h
-util.o: util.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h src/core/xmltag.h \
- jeeps/gpsmath.h jeeps/gpsport.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+util.o: util.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
+ jeeps/gpsport.h src/core/xmltag.h
util_crc.o: util_crc.cc
-v900.o: v900.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h
+v900.o: v900.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h
validate.o: validate.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h filterdefs.h
-vcf.o: vcf.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
- jeeps/gpsport.h
-vecs.o: vecs.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h csv_util.h gbversion.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ filterdefs.h filter.h validate.h
+vcf.o: vcf.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
+ jeeps/gpsport.h
+vecs.o: vecs.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h csv_util.h \
+ gbversion.h
vidaone.o: vidaone.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
vitosmt.o: vitosmt.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h grtcirc.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ grtcirc.h
vitovtt.o: vitovtt.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h
-vpl.o: vpl.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+vpl.o: vpl.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h
waypt.o: waypt.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
- grtcirc.h garmin_fs.h jeeps/gps.h jeeps/gpsport.h jeeps/gpsdevice.h \
- jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
- jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
- jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
- src/core/logging.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ cet_util.h garmin_fs.h jeeps/gps.h jeeps/../defs.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gps.h jeeps/gpssend.h jeeps/gpsread.h \
+ jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h \
+ jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h \
+ jeeps/gpsinput.h jeeps/gpsproj.h grtcirc.h src/core/logging.h
wbt-200.o: wbt-200.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h \
- grtcirc.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h \
+ grtcirc.h
wfff_xml.o: wfff_xml.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ xmlgeneric.h
wintec_tes.o: wintec_tes.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
-xcsv.o: xcsv.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h cet_util.h csv_util.h \
- jeeps/gpsmath.h jeeps/gpsport.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
+xcsv.o: xcsv.cc csv_util.h queue.h defs.h config.h zlib/zlib.h \
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h jeeps/gpsmath.h jeeps/gpsport.h src/core/file.h \
+ defs.h src/core/logging.h
xhtmlent.o: xhtmlent.cc
xmlgeneric.o: xmlgeneric.cc defs.h config.h queue.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
- xmlgeneric.h cet_util.h src/core/file.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h cet_util.h src/core/file.h defs.h xmlgeneric.h
xmltag.o: xmltag.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
- src/core/xmltag.h
-xol.o: xol.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
- cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h \
- jeeps/gpsmath.h jeeps/gpsport.h garmin_tables.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ cet_util.h src/core/xmltag.h
+xol.o: xol.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h garmin_tables.h \
+ jeeps/gpsmath.h jeeps/gpsport.h src/core/file.h defs.h \
+ src/core/xmlstreamwriter.h xmlgeneric.h
yahoo.o: yahoo.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ xmlgeneric.h
zlib/adler32.o: zlib/adler32.c zlib/zutil.h zlib/zlib.h zlib/zconf.h \
- config.h
+ config.h
zlib/compress.o: zlib/compress.c zlib/zlib.h zlib/zconf.h config.h
+zlib/contrib/minizip/ioapi.o: zlib/contrib/minizip/ioapi.c \
+ zlib/contrib/minizip/ioapi.h zlib/zlib.h zlib/zconf.h config.h
+zlib/contrib/minizip/zip.o: zlib/contrib/minizip/zip.c zlib/zlib.h \
+ zlib/zconf.h config.h zlib/contrib/minizip/zip.h \
+ zlib/contrib/minizip/ioapi.h zlib/contrib/minizip/crypt.h
zlib/crc32.o: zlib/crc32.c zlib/zutil.h zlib/zlib.h zlib/zconf.h config.h \
- zlib/crc32.h
+ zlib/crc32.h
zlib/deflate.o: zlib/deflate.c zlib/deflate.h zlib/zutil.h zlib/zlib.h \
- zlib/zconf.h config.h
+ zlib/zconf.h config.h
zlib/gzclose.o: zlib/gzclose.c zlib/gzguts.h zlib/zlib.h zlib/zconf.h \
- config.h
+ config.h
zlib/gzlib.o: zlib/gzlib.c zlib/gzguts.h zlib/zlib.h zlib/zconf.h \
- config.h
+ config.h
zlib/gzread.o: zlib/gzread.c zlib/gzguts.h zlib/zlib.h zlib/zconf.h \
- config.h
+ config.h
zlib/gzwrite.o: zlib/gzwrite.c zlib/gzguts.h zlib/zlib.h zlib/zconf.h \
- config.h
+ config.h
zlib/infback.o: zlib/infback.c zlib/zutil.h zlib/zlib.h zlib/zconf.h \
- config.h zlib/inftrees.h zlib/inflate.h zlib/inffast.h zlib/inffixed.h
+ config.h zlib/inftrees.h zlib/inflate.h zlib/inffast.h zlib/inffixed.h
zlib/inffast.o: zlib/inffast.c zlib/zutil.h zlib/zlib.h zlib/zconf.h \
- config.h zlib/inftrees.h zlib/inflate.h zlib/inffast.h
+ config.h zlib/inftrees.h zlib/inflate.h zlib/inffast.h
zlib/inflate.o: zlib/inflate.c zlib/zutil.h zlib/zlib.h zlib/zconf.h \
- config.h zlib/inftrees.h zlib/inflate.h zlib/inffast.h zlib/inffixed.h
+ config.h zlib/inftrees.h zlib/inflate.h zlib/inffast.h zlib/inffixed.h
zlib/inftrees.o: zlib/inftrees.c zlib/zutil.h zlib/zlib.h zlib/zconf.h \
- config.h zlib/inftrees.h
+ config.h zlib/inftrees.h
zlib/trees.o: zlib/trees.c zlib/deflate.h zlib/zutil.h zlib/zlib.h \
- zlib/zconf.h config.h zlib/trees.h
+ zlib/zconf.h config.h zlib/trees.h
zlib/uncompr.o: zlib/uncompr.c zlib/zlib.h zlib/zconf.h config.h
zlib/zutil.o: zlib/zutil.c zlib/zutil.h zlib/zlib.h zlib/zconf.h config.h \
- zlib/gzguts.h
+ zlib/gzguts.h
internal_styles.cc: mkstyle.sh $(srcdir)/style/*.style
$(srcdir)/mkstyle.sh > internal_styles.cc || (rm -f internal_styles.cc ; exit 1)
#include "defs.h"
+#include "arcdist.h"
#include "filterdefs.h"
#include "grtcirc.h"
#if FILTERS_ENABLED
#define MYNAME "Arc filter"
-static double pos_dist;
-static char* distopt = nullptr;
-static char* arcfileopt = nullptr;
-static char* rteopt = nullptr;
-static char* trkopt = nullptr;
-static char* exclopt = nullptr;
-static char* ptsopt = nullptr;
-static char* projectopt = nullptr;
-
-typedef struct {
- double distance;
- double prjlatitude, prjlongitude;
- double frac;
- Waypoint* arcpt1, * arcpt2;
-} extra_data;
-
-static
-arglist_t arcdist_args[] = {
- {
- "file", &arcfileopt, "File containing vertices of arc",
- nullptr, ARGTYPE_FILE, ARG_NOMINMAX, nullptr
- },
- {
- "rte", &rteopt, "Route(s) are vertices of arc",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "trk", &trkopt, "Track(s) are vertices of arc",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "distance", &distopt, "Maximum distance from arc",
- nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
- },
- {
- "exclude", &exclopt, "Exclude points close to the arc", nullptr,
- ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "points", &ptsopt, "Use distance from vertices not lines",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "project", &projectopt, "Move waypoints to its projection on lines or vertices",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- ARG_TERMINATOR
-};
-
#define BADVAL 999999
-static void
-arcdist_arc_disp_wpt_cb(const Waypoint* arcpt2)
+void ArcDistanceFilter::arcdist_arc_disp_wpt_cb(const Waypoint* arcpt2)
{
queue* elem, * tmp;
Waypoint* waypointp;
(ptsopt || (arcpt1 &&
(arcpt1->latitude != BADVAL && arcpt1->longitude != BADVAL)))) {
#if NEWQ
- foreach(Waypoint* waypointp, waypt_list) {
+ foreach (Waypoint* waypointp, waypt_list) {
#else
QUEUE_FOR_EACH(&waypt_head, elem, tmp) {
waypointp = (Waypoint*) elem;
arcpt1 = (Waypoint*) arcpt2;
}
-static void
-arcdist_arc_disp_hdr_cb(const route_head*)
+void ArcDistanceFilter::arcdist_arc_disp_hdr_cb(const route_head*)
{
/* Set arcpt1 to NULL */
arcdist_arc_disp_wpt_cb(nullptr);
}
-static void
-arcdist_process()
+void ArcDistanceFilter::process()
{
+ WayptFunctor<ArcDistanceFilter> arcdist_arc_disp_wpt_cb_f(this, &ArcDistanceFilter::arcdist_arc_disp_wpt_cb);
+ RteHdFunctor<ArcDistanceFilter> arcdist_arc_disp_hdr_cb_f(this, &ArcDistanceFilter::arcdist_arc_disp_hdr_cb);
+
queue* elem, * tmp;
unsigned removed;
gbfclose(file_in);
} else if (rteopt) {
- route_disp_all(arcdist_arc_disp_hdr_cb, nullptr, arcdist_arc_disp_wpt_cb);
+ route_disp_all(arcdist_arc_disp_hdr_cb_f, nullptr, arcdist_arc_disp_wpt_cb_f);
} else if (trkopt) {
- track_disp_all(arcdist_arc_disp_hdr_cb, nullptr, arcdist_arc_disp_wpt_cb);
+ track_disp_all(arcdist_arc_disp_hdr_cb_f, nullptr, arcdist_arc_disp_wpt_cb_f);
}
removed = 0;
#if NEWQ
- foreach(Waypoint* wp, waypt_list) {
+ foreach (Waypoint* wp, waypt_list) {
#else
QUEUE_FOR_EACH(&waypt_head, elem, tmp) {
Waypoint* wp = (Waypoint*) elem;
}
}
-static void
-arcdist_init(const char*)
+void ArcDistanceFilter::init()
{
char* fm;
}
}
-static void
-arcdist_deinit()
-{
- /* do nothing */
-}
-
-filter_vecs_t arcdist_vecs = {
- arcdist_init,
- arcdist_process,
- arcdist_deinit,
- nullptr,
- arcdist_args
-};
#endif // FILTERS_ENABLED
--- /dev/null
+/*
+ Distance from point to arc filter
+
+ Copyright (C) 2002-2014 Robert Lipe, robertlipe+source@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef ARCDIST_H_INCLUDED_
+#define ARCDIST_H_INCLUDED_
+
+#include "defs.h" // for ARG_NOMINMAX, ARGTYPE_BOOL, Waypoint (ptr only)
+#include "filter.h" // for Filter
+
+#if FILTERS_ENABLED
+
+class ArcDistanceFilter:public Filter
+{
+public:
+ arglist_t* get_args() override
+ {
+ return args;
+ }
+ void init() override;
+ void process() override;
+
+private:
+ double pos_dist;
+ char* distopt = nullptr;
+ char* arcfileopt = nullptr;
+ char* rteopt = nullptr;
+ char* trkopt = nullptr;
+ char* exclopt = nullptr;
+ char* ptsopt = nullptr;
+ char* projectopt = nullptr;
+
+ typedef struct {
+ double distance;
+ double prjlatitude, prjlongitude;
+ double frac;
+ Waypoint* arcpt1, * arcpt2;
+ } extra_data;
+
+ arglist_t args[8] = {
+ {
+ "file", &arcfileopt, "File containing vertices of arc",
+ nullptr, ARGTYPE_FILE, ARG_NOMINMAX, nullptr
+ },
+ {
+ "rte", &rteopt, "Route(s) are vertices of arc",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "trk", &trkopt, "Track(s) are vertices of arc",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "distance", &distopt, "Maximum distance from arc",
+ nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
+ },
+ {
+ "exclude", &exclopt, "Exclude points close to the arc", nullptr,
+ ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "points", &ptsopt, "Use distance from vertices not lines",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "project", &projectopt, "Move waypoints to its projection on lines or vertices",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ ARG_TERMINATOR
+ };
+
+ void arcdist_arc_disp_wpt_cb(const Waypoint* arcpt2);
+ void arcdist_arc_disp_hdr_cb(const route_head*);
+
+};
+#endif // FILTERS_ENABLED
+#endif // ARCDIST_H_INCLUDED_
*/
#include "defs.h"
+#include "bend.h"
#include "filterdefs.h"
#include "grtcirc.h"
#if FILTERS_ENABLED
-static char* distopt = nullptr;
-static char* minangleopt = nullptr;
-
-static double maxDist;
-static double minAngle;
-
-static queue* routes_orig = nullptr;
-static int routes_orig_num = 0;
-
-static
-arglist_t bend_args[] = {
- {
- "distance", &distopt, "Distance to the bend in meters where the new points will be added",
- "25", ARGTYPE_FLOAT, ARG_NOMINMAX, nullptr
- },
- {
- "minangle", &minangleopt, "Minimum bend angle in degrees", "5",
- ARGTYPE_FLOAT, ARG_NOMINMAX, nullptr
- },
- ARG_TERMINATOR
-};
-
-static void
-bend_init(const char*)
+void BendFilter::init()
{
maxDist = 0.0;
if (distopt) {
route_flush_all_routes();
}
-static Waypoint*
-create_wpt_dest(const Waypoint* wpt_orig, double lat_orig,
- double long_orig, double lat_orig_adj, double long_orig_adj)
+Waypoint* BendFilter::create_wpt_dest(const Waypoint* wpt_orig, double lat_orig,
+ double long_orig, double lat_orig_adj, double long_orig_adj)
{
double distance = gcdist(lat_orig, long_orig,
lat_orig_adj, long_orig_adj);
return wpt_dest;
}
-static int
-is_small_angle(double lat_orig, double long_orig, double lat_orig_prev,
- double long_orig_prev, double lat_orig_next,
- double long_orig_next)
+int BendFilter::is_small_angle(double lat_orig, double long_orig, double lat_orig_prev,
+ double long_orig_prev, double lat_orig_next,
+ double long_orig_next)
{
double heading_prev = heading_true_degrees(lat_orig, long_orig,
lat_orig_prev, long_orig_prev);
|| (std::abs(heading_diff - 360.0) < minAngle));
}
-static void
-process_route(const route_head* route_orig, route_head* route_dest)
+void BendFilter::process_route(const route_head* route_orig, route_head* route_dest)
{
Waypoint* wpt_orig_prev = nullptr;
Waypoint* wpt_orig = nullptr;
}
}
-static void
-process_route_orig(const route_head* route_orig)
+void BendFilter::process_route_orig(const route_head* route_orig)
{
route_head* route_dest = route_head_alloc();
route_dest->rte_name = route_orig->rte_name;
process_route(route_orig, route_dest);
}
-static void
-bend_process()
+void BendFilter::process()
{
queue* elem, *tmp;
QUEUE_FOR_EACH(routes_orig, elem, tmp) {
}
}
-static void
-bend_deinit()
+void BendFilter::deinit()
{
route_flush(routes_orig);
xfree(routes_orig);
}
-static void
-bend_exit()
-{
-}
-
-filter_vecs_t bend_vecs = {
- bend_init,
- bend_process,
- bend_deinit,
- bend_exit,
- bend_args
-};
-
#endif // FILTERS_ENABLED
--- /dev/null
+/*
+ Add route points before and after a bend.
+
+ Copyright (C) 2011 Fernando Arbeiza, fernando.arbeiza@gmail.com
+ Copyright (C) 2011 Robert Lipe, robertlipe+source@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef BEND_H_INCLUDED_
+#define BEND_H_INCLUDED_
+
+#include "defs.h" // for route_head (ptr only), ARGTYPE_FLOAT, ARG_NOMINMAX
+#include "filter.h" // for Filter
+#include "queue.h" // for queue
+
+#if FILTERS_ENABLED
+
+class BendFilter:public Filter
+{
+public:
+ arglist_t* get_args() override
+ {
+ return args;
+ }
+ void init() override;
+ void process() override;
+ void deinit() override;
+
+private:
+ char* distopt = nullptr;
+ char* minangleopt = nullptr;
+
+ double maxDist;
+ double minAngle;
+
+ queue* routes_orig = nullptr;
+ int routes_orig_num = 0;
+
+ arglist_t args[3] = {
+ {
+ "distance", &distopt, "Distance to the bend in meters where the new points will be added",
+ "25", ARGTYPE_FLOAT, ARG_NOMINMAX, nullptr
+ },
+ {
+ "minangle", &minangleopt, "Minimum bend angle in degrees", "5",
+ ARGTYPE_FLOAT, ARG_NOMINMAX, nullptr
+ },
+ ARG_TERMINATOR
+ };
+
+ Waypoint* create_wpt_dest(const Waypoint* wpt_orig, double lat_orig,
+ double long_orig, double lat_orig_adj, double long_orig_adj);
+ int is_small_angle(double lat_orig, double long_orig, double lat_orig_prev,
+ double long_orig_prev, double lat_orig_next,
+ double long_orig_next);
+ void process_route(const route_head* route_orig, route_head* route_dest);
+ void process_route_orig(const route_head* route_orig);
+
+};
+
+#endif // FILTERS_ENABLED
+#endif // BEND_H_INCLUDED_
void set_waypt_count(unsigned int nc);
void waypt_disp(const Waypoint* wpt);
void waypt_status_disp(int total_ct, int myct);
-void waypt_disp_all(waypt_cb);
-void waypt_disp_session(const session_t* se, waypt_cb cb);
+//void waypt_disp_all(waypt_cb); /* template */
+//void waypt_disp_session(const session_t* se, waypt_cb cb); /* template */
void waypt_init_bounds(bounds* bounds);
int waypt_bounds_valid(bounds* bounds);
void waypt_add_to_bounds(bounds* bounds, const Waypoint* waypointp);
double waypt_gradient(const Waypoint* A, const Waypoint* B);
double waypt_course(const Waypoint* A, const Waypoint* B);
+template <typename T>
+void
+waypt_disp_session(const session_t* se, T cb)
+{
+ extern queue waypt_head;
+ int i = 0;
+#if NEWQ
+ foreach (Waypoint* waypointp, waypt_list) {
+#else
+ queue* elem, *tmp;
+ Waypoint* waypointp;
+ QUEUE_FOR_EACH(&waypt_head, elem, tmp) {
+ waypointp = (Waypoint*) elem;
+#endif
+ if ((se == nullptr) || (waypointp->session == se)) {
+ if (global_opts.verbose_status) {
+ i++;
+ waypt_status_disp(waypt_count(), i);
+ }
+ cb(waypointp);
+ }
+ }
+ if (global_opts.verbose_status) {
+ fprintf(stdout, "\r\n");
+ }
+}
+
+template <typename T>
+void
+waypt_disp_all(T cb)
+{
+ waypt_disp_session(nullptr, cb);
+}
+
/*
* Structure of recomputed track/roue data.
*/
Waypoint* route_find_waypt_by_name(route_head* rh, const char* name);
void route_del_wpt(route_head* rte, Waypoint* wpt);
void track_del_wpt(route_head* rte, Waypoint* wpt);
-void route_disp(const route_head* rte, waypt_cb);
-void route_disp_all(route_hdr, route_trl, waypt_cb);
-void track_disp_all(route_hdr, route_trl, waypt_cb);
+//void route_disp(const route_head* rte, waypt_cb); /* template */
+void route_disp(const route_head* rte, std::nullptr_t /* waypt_cb */); /* override to catch nullptr */
+//void route_disp_all(route_hdr, route_trl, waypt_cb); /* template */
+//void track_disp_all(route_hdr, route_trl, waypt_cb); /* template */
void route_reverse(const route_head* rte_hd);
void route_disp_session(const session_t* se, route_hdr rh, route_trl rt, waypt_cb wc);
void track_disp_session(const session_t* se, route_hdr rh, route_trl rt, waypt_cb wc);
void track_restore(queue* head_bak);
void track_recompute(const route_head* trk, computed_trkdata**);
+template <typename T>
+void
+route_disp(const route_head* rh, T cb)
+{
+ queue* elem, *tmp;
+// cb != nullptr, caught with an overload of route_disp
+ QUEUE_FOR_EACH(&rh->waypoint_list, elem, tmp) {
+ Waypoint* waypointp;
+ waypointp = (Waypoint*) elem;
+ cb(waypointp);
+ }
+}
+
+template <typename T1, typename T2, typename T3>
+void
+common_disp_all(queue* qh, T1 rh, T2 rt, T3 wc)
+{
+ queue* elem, *tmp;
+ QUEUE_FOR_EACH(qh, elem, tmp) {
+ const route_head* rhp;
+ rhp = (route_head*) elem;
+// rh != nullptr, caught with an overload of common_disp_all
+ rh(rhp);
+ route_disp(rhp, wc);
+// rt != nullptr, caught with an overload of common_disp_all
+ rt(rhp);
+ }
+}
+
+template <typename T2, typename T3>
+void
+common_disp_all(queue* qh, std::nullptr_t /* rh */, T2 rt, T3 wc)
+{
+ queue* elem, *tmp;
+ QUEUE_FOR_EACH(qh, elem, tmp) {
+ const route_head* rhp;
+ rhp = (route_head*) elem;
+// rh == nullptr
+ route_disp(rhp, wc);
+// rt != nullptr, caught with an overload of common_disp_all
+ rt(rhp);
+ }
+}
+
+template <typename T1, typename T3>
+void
+common_disp_all(queue* qh, T1 rh, std::nullptr_t /* rt */, T3 wc)
+{
+ queue* elem, *tmp;
+ QUEUE_FOR_EACH(qh, elem, tmp) {
+ const route_head* rhp;
+ rhp = (route_head*) elem;
+// rh != nullptr, caught with an overload of common_disp_all
+ rh(rhp);
+ route_disp(rhp, wc);
+// rt == nullptr
+ }
+}
+
+template <typename T3>
+void
+common_disp_all(queue* qh, std::nullptr_t /* rh */, std::nullptr_t /* rt */, T3 wc)
+{
+ queue* elem, *tmp;
+ QUEUE_FOR_EACH(qh, elem, tmp) {
+ const route_head* rhp;
+ rhp = (route_head*) elem;
+// rh == nullptr
+ route_disp(rhp, wc);
+// rt == nullptr
+ }
+}
+
+template <typename T1, typename T2, typename T3>
+void
+route_disp_all(T1 rh, T2 rt, T3 wc)
+{
+ extern queue my_route_head;
+
+ common_disp_all(&my_route_head, rh, rt, wc);
+}
+
+template <typename T1, typename T2, typename T3>
+void
+track_disp_all(T1 rh, T2 rt, T3 wc)
+{
+ extern queue my_track_head;
+
+ common_disp_all(&my_track_head, rh, rt, wc);
+}
+
typedef struct {
volatile int request_terminate;
} posn_status;
*/
#include "defs.h"
+#include "discard.h"
#include "filterdefs.h"
#include <cstdlib>
-// Can't use QRegularExpression because Linux won't get Qt 5 for years.
+// Can't use QRegularExpression because Linux won't get Qt 5 for years.
#include <QtCore/QRegExp>
#include <cstdio>
#include <cstdlib>
#if FILTERS_ENABLED
-static char* hdopopt = nullptr;
-static char* vdopopt = nullptr;
-static char* andopt = nullptr;
-static char* satopt = nullptr;
-static char* fixnoneopt = nullptr;
-static char* fixunknownopt = nullptr;
-static char* eleminopt = nullptr;
-static char* elemaxopt = nullptr;
-static char* nameopt = nullptr;
-static QRegExp name_regex;
-static char* descopt = nullptr;
-static QRegExp desc_regex;
-static char* cmtopt = nullptr;
-static QRegExp cmt_regex;
-static char* iconopt = nullptr;
-static QRegExp icon_regex;
-
-static double hdopf;
-static double vdopf;
-static int satpf;
-static int eleminpf;
-static int elemaxpf;
-static gpsdata_type what;
-static route_head* head;
-
-static
-arglist_t fix_args[] = {
- {
- "hdop", &hdopopt, "Suppress points with higher hdop",
- "-1.0", ARGTYPE_BEGIN_REQ | ARGTYPE_FLOAT, ARG_NOMINMAX, nullptr
- },
- {
- "vdop", &vdopopt, "Suppress points with higher vdop",
- "-1.0", ARGTYPE_END_REQ | ARGTYPE_FLOAT, ARG_NOMINMAX, nullptr
- },
- {
- "hdopandvdop", &andopt, "Link hdop and vdop supression with AND",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "sat", &satopt, "Minimium sats to keep points",
- "-1.0", ARGTYPE_BEGIN_REQ | ARGTYPE_INT, ARG_NOMINMAX, nullptr
- },
- {
- "fixnone", &fixnoneopt, "Suppress points without fix",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "fixunknown", &fixunknownopt, "Suppress points with unknown fix",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "elemin", &eleminopt, "Suppress points below given elevation in meters",
- nullptr, ARGTYPE_BEGIN_REQ | ARGTYPE_INT, ARG_NOMINMAX, nullptr
- },
- {
- "elemax", &elemaxopt, "Suppress points above given elevation in meters",
- nullptr, ARGTYPE_BEGIN_REQ | ARGTYPE_INT, ARG_NOMINMAX, nullptr
- },
- {
- "matchname", &nameopt,
- "Suppress points where name matches given name", nullptr, ARGTYPE_STRING,
- ARG_NOMINMAX, nullptr
- },
- {
- "matchdesc", &descopt,
- "Suppress points where description matches given name", nullptr, ARGTYPE_STRING,
- ARG_NOMINMAX, nullptr
- },
- {
- "matchcmt", &cmtopt,
- "Suppress points where comment matches given name", nullptr, ARGTYPE_STRING,
- ARG_NOMINMAX, nullptr
- },
- {
- "matchicon", &iconopt,
- "Suppress points where type matches given name", nullptr, ARGTYPE_STRING,
- ARG_NOMINMAX, nullptr
- },
- ARG_TERMINATOR
-};
/*
* Decide whether to keep or toss this point.
*/
-static void
-fix_process_wpt(const Waypoint* wpt)
+void DiscardFilter::fix_process_wpt(const Waypoint* wpt)
{
int del = 0;
int delh = 0;
}
}
-static void
-fix_process_head(const route_head* trk)
+void DiscardFilter::fix_process_head(const route_head* trk)
{
head = (route_head*)trk;
}
-static void
-fix_process()
+void DiscardFilter::process()
{
+ WayptFunctor<DiscardFilter> fix_process_wpt_f(this, &DiscardFilter::fix_process_wpt);
+ RteHdFunctor<DiscardFilter> fix_process_head_f(this, &DiscardFilter::fix_process_head);
+
// Filter waypoints.
what = wptdata;
- waypt_disp_all(fix_process_wpt);
+ waypt_disp_all(fix_process_wpt_f);
// Filter tracks
what = trkdata;
- track_disp_all(fix_process_head, nullptr, fix_process_wpt);
+ track_disp_all(fix_process_head_f, nullptr, fix_process_wpt_f);
// And routes
what = rtedata;
- route_disp_all(fix_process_head, nullptr, fix_process_wpt);
+ route_disp_all(fix_process_head_f, nullptr, fix_process_wpt_f);
}
-static void
-fix_init(const char*)
+void DiscardFilter::init()
{
if (hdopopt) {
hdopf = atof(hdopopt);
}
}
-filter_vecs_t discard_vecs = {
- fix_init,
- fix_process,
- nullptr,
- nullptr,
- fix_args
-};
#endif
--- /dev/null
+/*
+ Discard points based on high Degree of Precision (DOP) values.
+
+ Copyright (C) 2005-2014 Robert Lipe, robertlipe+source@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef DISCARD_H_INCLUDED_
+#define DISCARD_H_INCLUDED_
+
+// Can't use QRegularExpression because Linux won't get Qt 5 for years.
+#include <QtCore/QRegExp> // for QRegExp
+#include "defs.h" // for ARG_NOMINMAX, ARGTYPE_BEGIN_REQ, ARGTYPE_S...
+#include "filter.h" // for Filter
+
+#if FILTERS_ENABLED
+class DiscardFilter:public Filter
+{
+public:
+ arglist_t* get_args() override
+ {
+ return args;
+ }
+ void init() override;
+ void process() override;
+
+private:
+ char* hdopopt = nullptr;
+ char* vdopopt = nullptr;
+ char* andopt = nullptr;
+ char* satopt = nullptr;
+ char* fixnoneopt = nullptr;
+ char* fixunknownopt = nullptr;
+ char* eleminopt = nullptr;
+ char* elemaxopt = nullptr;
+ char* nameopt = nullptr;
+ QRegExp name_regex;
+ char* descopt = nullptr;
+ QRegExp desc_regex;
+ char* cmtopt = nullptr;
+ QRegExp cmt_regex;
+ char* iconopt = nullptr;
+ QRegExp icon_regex;
+
+ double hdopf;
+ double vdopf;
+ int satpf;
+ int eleminpf;
+ int elemaxpf;
+ gpsdata_type what;
+ route_head* head;
+
+ arglist_t args[13] = {
+ {
+ "hdop", &hdopopt, "Suppress points with higher hdop",
+ "-1.0", ARGTYPE_BEGIN_REQ | ARGTYPE_FLOAT, ARG_NOMINMAX, nullptr
+ },
+ {
+ "vdop", &vdopopt, "Suppress points with higher vdop",
+ "-1.0", ARGTYPE_END_REQ | ARGTYPE_FLOAT, ARG_NOMINMAX, nullptr
+ },
+ {
+ "hdopandvdop", &andopt, "Link hdop and vdop supression with AND",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "sat", &satopt, "Minimium sats to keep points",
+ "-1.0", ARGTYPE_BEGIN_REQ | ARGTYPE_INT, ARG_NOMINMAX, nullptr
+ },
+ {
+ "fixnone", &fixnoneopt, "Suppress points without fix",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "fixunknown", &fixunknownopt, "Suppress points with unknown fix",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "elemin", &eleminopt, "Suppress points below given elevation in meters",
+ nullptr, ARGTYPE_BEGIN_REQ | ARGTYPE_INT, ARG_NOMINMAX, nullptr
+ },
+ {
+ "elemax", &elemaxopt, "Suppress points above given elevation in meters",
+ nullptr, ARGTYPE_BEGIN_REQ | ARGTYPE_INT, ARG_NOMINMAX, nullptr
+ },
+ {
+ "matchname", &nameopt,
+ "Suppress points where name matches given name", nullptr, ARGTYPE_STRING,
+ ARG_NOMINMAX, nullptr
+ },
+ {
+ "matchdesc", &descopt,
+ "Suppress points where description matches given name", nullptr, ARGTYPE_STRING,
+ ARG_NOMINMAX, nullptr
+ },
+ {
+ "matchcmt", &cmtopt,
+ "Suppress points where comment matches given name", nullptr, ARGTYPE_STRING,
+ ARG_NOMINMAX, nullptr
+ },
+ {
+ "matchicon", &iconopt,
+ "Suppress points where type matches given name", nullptr, ARGTYPE_STRING,
+ ARG_NOMINMAX, nullptr
+ },
+ ARG_TERMINATOR
+ };
+
+ void fix_process_wpt(const Waypoint* wpt);
+ void fix_process_head(const route_head* trk);
+
+};
+
+#endif
+#endif // DISCARD_H_INCLUDED_
*/
#include "defs.h"
+#include "duplicate.h"
#include "filterdefs.h"
#include <cstdio>
#include <cstdlib> // qsort
#if FILTERS_ENABLED
-static char* snopt = nullptr;
-static char* lcopt = nullptr;
-static char* purge_duplicates = nullptr;
-static char* correct_coords = nullptr;
-
-static
-arglist_t dup_args[] = {
- {
- "shortname", &snopt, "Suppress duplicate waypoints based on name",
- nullptr, ARGTYPE_BEGIN_REQ | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "location", &lcopt, "Suppress duplicate waypoint based on coords",
- nullptr, ARGTYPE_END_REQ | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "all", &purge_duplicates, "Suppress all instances of duplicates",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "correct", &correct_coords, "Use coords from duplicate points",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- ARG_TERMINATOR
-};
-
-
-typedef struct btree_node {
- struct btree_node* left, *right;
- unsigned long data;
- Waypoint* wpt;
-} btree_node;
-
-static btree_node*
-addnode(btree_node* tree, btree_node* newnode, btree_node** oldnode)
+
+DuplicateFilter::btree_node* DuplicateFilter::addnode(btree_node* tree, btree_node* newnode, btree_node** oldnode)
{
btree_node* tmp, * last = nullptr;
return (tree);
}
-static void
-free_tree(btree_node* tree)
+void DuplicateFilter::free_tree(btree_node* tree)
{
if (tree->left) {
free_tree(tree->left);
xfree(tree);
}
-typedef struct {
- Waypoint* wpt;
- int index;
-} wpt_ptr;
-
/*
It looks odd that we have different comparisons for date and index.
*/
-static
-int
-compare(const void* a, const void* b)
+int DuplicateFilter::compare(const void* a, const void* b)
{
const wpt_ptr* wa = (wpt_ptr*)a;
const wpt_ptr* wb = (wpt_ptr*)b;
}
-
-static void
-duplicate_process(void)
+void DuplicateFilter::process(void)
{
Waypoint* waypointp;
btree_node* newnode, * btmp, * sup_tree = nullptr;
i = 0;
#if NEWQ
- foreach(Waypoint* waypointp, waypt_list) {
+ foreach (Waypoint* waypointp, waypt_list) {
bh->wpt = waypointp;
#else
QUEUE_FOR_EACH(&waypt_head, elem, tmp) {
}
}
-filter_vecs_t duplicate_vecs = {
- nullptr,
- duplicate_process,
- nullptr,
- nullptr,
- dup_args
-};
#endif
--- /dev/null
+/*
+ exact duplicate point filter utility.
+
+ Copyright (C) 2002-2014 Robert Lipe, robertlipe+source@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef DUPLICATE_H_INCLUDED_
+#define DUPLICATE_H_INCLUDED_
+
+#include "defs.h" // for ARGTYPE_BOOL, ARG_NOMINMAX, Waypoint (ptr only)
+#include "filter.h" // for Filter
+
+#if FILTERS_ENABLED
+
+class DuplicateFilter:public Filter
+{
+public:
+ arglist_t* get_args() override
+ {
+ return args;
+ }
+ void process() override;
+
+private:
+ char* snopt = nullptr;
+ char* lcopt = nullptr;
+ char* purge_duplicates = nullptr;
+ char* correct_coords = nullptr;
+
+ arglist_t args[5] = {
+ {
+ "shortname", &snopt, "Suppress duplicate waypoints based on name",
+ nullptr, ARGTYPE_BEGIN_REQ | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "location", &lcopt, "Suppress duplicate waypoint based on coords",
+ nullptr, ARGTYPE_END_REQ | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "all", &purge_duplicates, "Suppress all instances of duplicates",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "correct", &correct_coords, "Use coords from duplicate points",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ ARG_TERMINATOR
+ };
+
+ typedef struct btree_node {
+ struct btree_node* left, *right;
+ unsigned long data;
+ Waypoint* wpt;
+ } btree_node;
+
+ btree_node* addnode(btree_node* tree, btree_node* newnode, btree_node** oldnode);
+ void free_tree(btree_node* tree);
+
+ typedef struct {
+ Waypoint* wpt;
+ int index;
+ } wpt_ptr;
+
+ static int compare(const void* a, const void* b);
+
+};
+#endif
+#endif // DUPLICATE_H_INCLUDED_
--- /dev/null
+/*
+ Filter Base Class
+
+ Copyright (C) 2018 Robert Lipe, robertlipe+source@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+*/
+#ifndef FILTER_H_INCLUDED_
+#define FILTER_H_INCLUDED_
+
+#include "defs.h"
+
+class Filter
+{
+public:
+ virtual arglist_t* get_args() = 0;
+
+ virtual void init()
+ {
+ /* Called before filter processing */
+
+ /* optional. If not needed, delete and replace entry in vecs with NULL */
+
+ /* This may be used to parse filter options, allocate memory, and do other
+ * housekeeping that should be done before filtering */
+ }
+
+ virtual void process() = 0; /* this procedure must be present in vecs */
+//{
+// Here is how you register callbacks for all waypoints, routes, tracks.
+// waypt_disp_all(waypt)
+// route_disp_all(head, tail, rtept);
+// track_disp_all(head, tail, trkpt);
+//}
+
+ virtual void deinit()
+ {
+ /* called after filter processing */
+
+ /* optional. If not needed, delete and replace entry in vecs with NULL */
+
+ /* This should be used to clean up any memory allocations that are no longer
+ * needed after the filter terminates. */
+ }
+
+ virtual void exit()
+ {
+ /* called on program exit */
+
+ /* optional. If not needed, delete and replace entry in vecs with NULL */
+
+ /* You should not need this for simple filters, but it may be used to
+ * clean up memory allocations that must persist from one invocation of
+ * your filter to the next (for example, the stack in the stack filter.)
+ * Note that this member will be called even if your filter has not been
+ * used, so it *cannot* assume that _init or _process has been called
+ * previously. */
+ }
+
+protected:
+ template <class MyFilter>
+ class RteHdFunctor
+ {
+ public:
+ typedef void (MyFilter::*RteHdCb)(const route_head*);
+ RteHdFunctor(MyFilter* obj, RteHdCb cb) : that(obj), _cb(cb) {}
+ void operator()(const route_head* rh)
+ {
+ ((that)->*(_cb))(rh);
+ }
+
+ private:
+ MyFilter* that;
+ RteHdCb _cb;
+ };
+
+ template <class MyFilter>
+ class WayptFunctor
+ {
+ public:
+ typedef void (MyFilter::*WayptCb)(const Waypoint*);
+ WayptFunctor(MyFilter* obj, WayptCb cb) : that(obj), _cb(cb) {}
+ void operator()(const Waypoint* wpt)
+ {
+ ((that)->*(_cb))(wpt);
+ }
+
+ private:
+ MyFilter* that;
+ WayptCb _cb;
+ };
+
+};
+#endif // FILTER_H_INCLUDED_
*/
#include "defs.h"
+#include "arcdist.h"
+#include "bend.h"
+#include "discard.h"
+#include "duplicate.h"
#include "filterdefs.h"
+#include "filter.h"
+#include "height.h"
+#include "interpolate.h"
+#include "nukedata.h"
+#include "polygon.h"
+#include "position.h"
+#include "radius.h"
+#include "reverse_route.h"
+#include "smplrout.h"
+#include "sort.h"
+#include "stackfilter.h"
+#include "swapdata.h"
+#include "trackfilter.h"
+#include "transform.h"
+#include "validate.h"
#include "gbversion.h"
#include "inifile.h"
#include <QtCore/QStringList>
#include <cstdlib> // qsort
typedef struct {
- filter_vecs_t* vec;
+ Filter* vec;
const char* name;
const char* desc;
} fl_vecs_t;
-extern filter_vecs_t bend_vecs;
-extern filter_vecs_t position_vecs;
-extern filter_vecs_t radius_vecs;
-extern filter_vecs_t duplicate_vecs;
-extern filter_vecs_t arcdist_vecs;
-extern filter_vecs_t polygon_vecs;
-extern filter_vecs_t routesimple_vecs;
-extern filter_vecs_t reverse_route_vecs;
-extern filter_vecs_t sort_vecs;
-extern filter_vecs_t stackfilt_vecs;
-extern filter_vecs_t trackfilter_vecs;
-extern filter_vecs_t discard_vecs;
-extern filter_vecs_t nuke_vecs;
-extern filter_vecs_t interpolatefilt_vecs;
-extern filter_vecs_t transform_vecs;
-extern filter_vecs_t height_vecs;
-extern filter_vecs_t swapdata_vecs;
-extern filter_vecs_t validate_vecs;
+ArcDistanceFilter arcdist;
+BendFilter bend;
+DiscardFilter discard;
+DuplicateFilter duplicate;
+HeightFilter height;
+InterpolateFilter interpolate;
+NukeDataFilter nukedata;
+PolygonFilter polygon;
+PositionFilter position;
+RadiusFilter radius;
+ReverseRouteFilter reverse_route;
+SimplifyRouteFilter routesimple;
+SortFilter sort;
+StackFilter stackfilt;
+SwapDataFilter swapdata;
+TrackFilter trackfilter;
+TransformFilter transform;
+ValidateFilter validate;
+
static
fl_vecs_t filter_vec_list[] = {
#if FILTERS_ENABLED
+ {
+ &arcdist,
+ "arc",
+ "Include Only Points Within Distance of Arc",
+ },
+ {
+ &bend,
+ "bend",
+ "Add points before and after bends in routes"
+ },
+ {
+ &discard,
+ "discard",
+ "Remove unreliable points with high hdop or vdop"
+ },
+ {
+ &duplicate,
+ "duplicate",
+ "Remove Duplicates",
+ },
+ {
+ &interpolate,
+ "interpolate",
+ "Interpolate between trackpoints"
+ },
+ {
+ &nukedata,
+ "nuketypes",
+ "Remove all waypoints, tracks, or routes"
+ },
+ {
+ &polygon,
+ "polygon",
+ "Include Only Points Inside Polygon",
+ },
+ {
+ &position,
+ "position",
+ "Remove Points Within Distance",
+ },
+ {
+ &radius,
+ "radius",
+ "Include Only Points Within Radius",
+ },
+ {
+ &routesimple,
+ "simplify",
+ "Simplify routes",
+ },
+ {
+ &sort,
+ "sort",
+ "Rearrange waypoints by resorting",
+ },
+ {
+ &stackfilt,
+ "stack",
+ "Save and restore waypoint lists"
+ },
+ {
+ &reverse_route,
+ "reverse",
+ "Reverse stops within routes",
+ },
+ {
+ &trackfilter,
+ "track",
+ "Manipulate track lists"
+ },
+ {
+ &transform,
+ "transform",
+ "Transform waypoints into a route, tracks into routes, ..."
+ },
+ {
+ &height,
+ "height",
+ "Manipulate altitudes"
+ },
+ {
+ &swapdata,
+ "swap",
+ "Swap latitude and longitude of all loaded points"
+ },
{
- &arcdist_vecs,
- "arc",
- "Include Only Points Within Distance of Arc",
- },
- {
- &bend_vecs,
- "bend",
- "Add points before and after bends in routes"
- },
- {
- &discard_vecs,
- "discard",
- "Remove unreliable points with high hdop or vdop"
- },
- {
- &duplicate_vecs,
- "duplicate",
- "Remove Duplicates",
- },
- {
- &interpolatefilt_vecs,
- "interpolate",
- "Interpolate between trackpoints"
- },
- {
- &nuke_vecs,
- "nuketypes",
- "Remove all waypoints, tracks, or routes"
- },
- {
- &polygon_vecs,
- "polygon",
- "Include Only Points Inside Polygon",
- },
- {
- &position_vecs,
- "position",
- "Remove Points Within Distance",
- },
- {
- &radius_vecs,
- "radius",
- "Include Only Points Within Radius",
- },
- {
- &routesimple_vecs,
- "simplify",
- "Simplify routes",
- },
- {
- &sort_vecs,
- "sort",
- "Rearrange waypoints by resorting",
- },
- {
- &stackfilt_vecs,
- "stack",
- "Save and restore waypoint lists"
- },
- {
- &reverse_route_vecs,
- "reverse",
- "Reverse stops within routes",
- },
- {
- &trackfilter_vecs,
- "track",
- "Manipulate track lists"
- },
- {
- &transform_vecs,
- "transform",
- "Transform waypoints into a route, tracks into routes, ..."
- },
- {
- &height_vecs,
- "height",
- "Manipulate altitudes"
- },
- {
- &swapdata_vecs,
- "swap",
- "Swap latitude and longitude of all loaded points"
- },
- {
- &validate_vecs,
+ &validate,
"validate",
"Validate internal data structures"
},
#elif defined (MINIMAL_FILTERS)
{
- &trackfilter_vecs,
+ &trackfilter,
"track",
"Manipulate track lists"
},
}
};
-filter_vecs_t*
+Filter*
find_filter_vec(const char* const vecname, const char** opts)
{
fl_vecs_t* vec = filter_vec_list;
}
/* step 1: initialize by inifile or default values */
- if (vec->vec->args) {
- for (ap = vec->vec->args; ap->argstring; ap++) {
+ struct arglist* args = vec->vec->get_args();
+ if (args) {
+ for (ap = args; ap->argstring; ap++) {
const char* temp;
temp = inifile_readstr(global_opts.inifile, vec->name, ap->argstring);
if (res) {
*opts = res+1;
- if (vec->vec->args) {
- for (ap = vec->vec->args; ap->argstring; ap++) {
+ if (args) {
+ for (ap = args; ap->argstring; ap++) {
char* opt;
opt = get_option(*opts, ap->argstring);
}
if (global_opts.debug_level >= 1) {
- disp_vec_options(vec->name, vec->vec->args);
+ disp_vec_options(vec->name, args);
}
xfree(v);
}
void
-free_filter_vec(filter_vecs_t* fvec)
+free_filter_vec(Filter* filter)
{
arglist_t* ap;
+ struct arglist* args = filter->get_args();
- if (fvec->args) {
- for (ap = fvec->args; ap->argstring; ap++) {
+ if (args) {
+ for (ap = args; ap->argstring; ap++) {
if (ap->argvalptr) {
xfree(ap->argvalptr);
ap->argvalptr = *ap->argval = nullptr;
fl_vecs_t* vec = filter_vec_list;
while (vec->vec) {
arglist_t* ap;
- if (vec->vec->args) {
- for (ap = vec->vec->args; ap->argstring; ap++) {
+ struct arglist* args = vec->vec->get_args();
+ if (args) {
+ for (ap = args; ap->argstring; ap++) {
ap->argvalptr = nullptr;
}
}
{
fl_vecs_t* vec = filter_vec_list;
while (vec->vec) {
- if (vec->vec->f_exit) {
- (vec->vec->f_exit)();
- }
+ (vec->vec->exit)();
vec++;
}
}
for (vec = filter_vec_list; vec->vec; vec++) {
printf(" %-20.20s %-50.50s\n",
vec->name, vec->desc);
- for (ap = vec->vec->args; ap && ap->argstring; ap++) {
+ struct arglist* args = vec->vec->get_args();
+ for (ap = args; ap && ap->argstring; ap++) {
if (!(ap->argtype & ARGTYPE_HIDDEN))
printf(" %-18.18s %-.50s %s\n",
ap->argstring, ap->helpstring,
}
printf(" %-20.20s %-50.50s\n",
vec->name, vec->desc);
- for (ap = vec->vec->args; ap && ap->argstring; ap++) {
+ struct arglist* args = vec->vec->get_args();
+ for (ap = args; ap && ap->argstring; ap++) {
if (!(ap->argtype & ARGTYPE_HIDDEN))
printf(" %-18.18s %-.50s %s\n",
ap->argstring, ap->helpstring,
const fl_vecs_t* const ap = (const fl_vecs_t*) a;
const fl_vecs_t* const bp = (const fl_vecs_t*) b;
- return case_ignore_strcmp(ap->desc , bp->desc);
+ return case_ignore_strcmp(ap->desc, bp->desc);
}
static
disp_help_url(vec, nullptr);
printf("\n");
- for (ap = vec->vec->args; ap && ap->argstring; ap++) {
+ struct arglist* args = vec->vec->get_args();
+ for (ap = args; ap && ap->argstring; ap++) {
if (!(ap->argtype & ARGTYPE_HIDDEN)) {
printf("option\t%s\t%s\t%s\t%s\t%s\t%s\t%s",
vec->name,
* This is our (weak) attempt to make that distinction.
*/
+#ifndef FILTERDEFS_H_INCLUDED_
+#define FILTERDEFS_H_INCLUDED_
+
#if NEWQ
#include <QtCore/QList>
extern QList<Waypoint*> waypt_list;
#include "queue.h"
extern queue waypt_head;
#endif
+#include "filter.h"
-typedef void (*filter_init)(char const*);
+typedef void (*filter_init)(void);
typedef void (*filter_process)(void);
typedef void (*filter_deinit)(void);
typedef void (*filter_exit)(void);
struct arglist* args;
} filter_vecs_t;
-filter_vecs_t* find_filter_vec(const char* const, const char**);
-void free_filter_vec(filter_vecs_t*);
+Filter* find_filter_vec(const char* const, const char**);
+void free_filter_vec(Filter*);
void disp_filters(int version);
void disp_filter(const char* vecname);
void disp_filter_vec(const char* vecname);
void init_filter_vecs(void);
void exit_filter_vecs(void);
+#endif // FILTERDEFS_H_INCLUDED_
#include "defs.h"
#include "filterdefs.h"
+#include "height.h"
#include <cmath>
#include <cstdlib>
#define MYNAME "height"
#if FILTERS_ENABLED
-static char* addopt = nullptr;
-static char* wgs84tomslopt = nullptr;
-static double addf;
-
-
-static
-arglist_t height_args[] = {
- {
- "add", &addopt, "Adds a constant value to every altitude (meter, append \"f\" (x.xxf) for feet)",
- nullptr, ARGTYPE_BEGIN_REQ | ARGTYPE_FLOAT, ARG_NOMINMAX, nullptr
- },
- {
- "wgs84tomsl", &wgs84tomslopt, "Converts WGS84 ellipsoidal height to orthometric height (MSL)",
- nullptr, ARGTYPE_END_REQ | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- ARG_TERMINATOR
-};
-
-
-static double bilinear(double x1, double y1, double x2, double y2, double x, double y, double z11, double z12, double z21, double z22)
+
+double HeightFilter::bilinear(double x1, double y1, double x2, double y2, double x, double y, double z11, double z12, double z21, double z22)
{
double delta;
return (z22*(y-y1)*(x-x1)+z12*(y2-y)*(x-x1)+z21*(y-y1)*(x2-x)+z11*(y2-y)*(x2-x))/delta;
}
-
/* return geoid separation (MSL - WGS84) in meters, given a lat/lot in degrees */
-static double wgs84_separation(double lat, double lon)
+double HeightFilter::wgs84_separation(double lat, double lon)
{
-#include "height.h"
+#include "heightgrid.h"
int ilat, ilon;
int ilat1, ilat2, ilon1, ilon2;
);
}
-
-static void
-correct_height(const Waypoint* wpt)
+void HeightFilter::correct_height(const Waypoint* wpt)
{
Waypoint* waypointp = (Waypoint*) wpt;
if (addopt) {
waypointp->altitude += addf;
}
-
+
if (wgs84tomslopt) {
- waypointp->altitude -= wgs84_separation(waypointp->latitude, waypointp->longitude);
+ waypointp->altitude -= wgs84_separation(waypointp->latitude, waypointp->longitude);
}
}
}
-
-static void
-height_init(const char*)
+void HeightFilter::init()
{
char* unit;
}
}
-
-static void
-height_process() /* this procedure must be present in vecs */
+void HeightFilter::process()
{
- waypt_disp_all(correct_height);
- route_disp_all(nullptr, nullptr, correct_height);
- track_disp_all(nullptr, nullptr, correct_height);
-}
-
-
-filter_vecs_t height_vecs = {
- height_init,
- height_process,
- nullptr,
- nullptr,
- height_args
-};
+ WayptFunctor<HeightFilter> correct_height_f(this, &HeightFilter::correct_height);
+ waypt_disp_all(correct_height_f);
+ route_disp_all(nullptr, nullptr, correct_height_f);
+ track_disp_all(nullptr, nullptr, correct_height_f);
+}
#endif // FILTERS_ENABLED
/*
- Copyright (C) 2013 Robert Lipe, robertlipe+source@gpsbabel.org
+ Copyright (C) 2008 Alexander Stapff, a.stapff@gmx.de
+
+ Geoid separation code by Oleg Gusev, from data by Peter Dana.
+ This code was published by the gpsd project (http://gpsd.berlios.de/)
+ under the BSD license.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
*/
+
#ifndef HEIGHT_H_INCLUDED_
#define HEIGHT_H_INCLUDED_
-/* Created by "tools/createGeoidGrid 1.0 int8_t" using GeographicLib utility GeoidEval with egm96-5. */
+#include "defs.h" // for ARG_NOMINMAX, Waypoint (ptr only), arglist_t
+#include "filter.h" // for Filter
+
+#if FILTERS_ENABLED
+
+class HeightFilter:public Filter
+{
+public:
+ arglist_t* get_args() override
+ {
+ return args;
+ }
+ void init() override;
+ void process() override;
-#include <cstdint>
+private:
+ char* addopt = nullptr;
+ char* wgs84tomslopt = nullptr;
+ double addf;
+
+ arglist_t args[3] = {
+ {
+ "add", &addopt, "Adds a constant value to every altitude (meter, append \"f\" (x.xxf) for feet)",
+ nullptr, ARGTYPE_BEGIN_REQ | ARGTYPE_FLOAT, ARG_NOMINMAX, nullptr
+ },
+ {
+ "wgs84tomsl", &wgs84tomslopt, "Converts WGS84 ellipsoidal height to orthometric height (MSL)",
+ nullptr, ARGTYPE_END_REQ | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ ARG_TERMINATOR
+ };
+
+ double bilinear(double x1, double y1, double x2, double y2, double x, double y, double z11, double z12, double z21, double z22);
+ double wgs84_separation(double lat, double lon);
+ void correct_height(const Waypoint* wpt);
-#define GEOID_GRID_DEG 1.0
-#define GEOID_SCALE 1.0
-#define GEOID_ROW 181
-#define GEOID_COL 361
-static const int8_t geoid_delta[GEOID_COL* GEOID_ROW]= {
- /* -180,-179,-178,-177,-176,-175,-174,-173,-172,-171,-170,-169,-168,-167,-166,-165,-164,-163,-162,-161,-160,-159,-158,-157,-156,-155,-154,-153,-152,-151,-150,-149,-148,-147,-146,-145,-144,-143,-142,-141,-140,-139,-138,-137,-136,-135,-134,-133,-132,-131,-130,-129,-128,-127,-126,-125,-124,-123,-122,-121,-120,-119,-118,-117,-116,-115,-114,-113,-112,-111,-110,-109,-108,-107,-106,-105,-104,-103,-102,-101,-100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180 */
- /* -90.0 */ -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
- /* -89.0 */ -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
- /* -88.0 */ -30, -30, -30, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -26, -26, -26, -26, -26, -26, -26, -26, -26, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -26, -26, -26, -26, -26, -26, -26, -26, -26, -27, -27, -27, -27, -27, -27, -27, -27, -28, -28, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -30, -30, -30, -30, -30, -30, -30,
- /* -87.0 */ -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -30, -30, -30, -30, -30, -30, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -27, -27, -27, -27, -26, -26, -26, -26, -25, -25, -25, -25, -25, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -25, -25, -25, -25, -25, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -25, -25, -25, -24, -24, -24, -23, -23, -23, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -21, -21, -21, -21, -21, -21, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -19, -19, -19, -19, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -20, -20, -20, -20, -20, -20, -20, -20, -20, -21, -21, -21, -21, -21, -21, -22, -22, -22, -22, -22, -22, -22, -22, -22, -23, -23, -23, -23, -23, -23, -24, -24, -24, -24, -24, -24, -25, -25, -25, -25, -25, -26, -26, -26, -26, -27, -27, -27, -27, -28, -28, -28, -28, -28, -29, -29, -29, -29, -30, -30, -30, -30, -30, -30, -30, -31, -31, -31, -31, -31, -31, -31, -31, -31, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -32, -32, -32, -32, -32, -32, -32, -32,
- /* -86.0 */ -33, -33, -34, -34, -34, -34, -34, -34, -34, -34, -35, -35, -35, -35, -35, -35, -35, -36, -36, -36, -36, -36, -36, -37, -37, -37, -37, -37, -37, -37, -37, -37, -36, -36, -35, -35, -34, -34, -33, -33, -32, -32, -32, -32, -32, -32, -32, -33, -33, -34, -34, -34, -34, -34, -34, -33, -33, -32, -32, -31, -31, -31, -31, -31, -31, -32, -32, -32, -32, -32, -32, -32, -31, -31, -30, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -27, -27, -26, -26, -25, -24, -24, -23, -23, -23, -23, -23, -23, -23, -23, -23, -24, -24, -24, -24, -24, -25, -25, -25, -25, -26, -26, -26, -26, -27, -27, -26, -26, -26, -25, -24, -24, -23, -22, -21, -21, -20, -20, -20, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -17, -17, -17, -17, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -15, -15, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -16, -16, -16, -16, -16, -17, -17, -17, -17, -17, -18, -18, -18, -18, -19, -19, -19, -19, -20, -20, -20, -20, -21, -21, -21, -22, -22, -22, -23, -23, -23, -23, -24, -24, -24, -24, -25, -25, -25, -26, -26, -27, -27, -27, -28, -28, -28, -29, -29, -29, -30, -30, -30, -31, -31, -31, -32, -32, -32, -32, -32, -33, -33, -33, -33, -33, -33, -34, -34, -34, -34, -34, -34, -34, -34, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -35, -35, -35, -35, -34, -34, -34, -34, -33, -33, -33, -33, -33, -33, -33, -33, -33,
- /* -85.0 */ -37, -38, -39, -39, -40, -40, -40, -39, -39, -39, -39, -39, -40, -40, -41, -41, -41, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -43, -43, -43, -43, -42, -42, -42, -41, -41, -41, -40, -40, -40, -40, -39, -39, -39, -38, -38, -38, -37, -37, -38, -38, -38, -38, -38, -38, -37, -37, -36, -35, -35, -34, -34, -34, -34, -34, -34, -34, -35, -35, -34, -34, -33, -32, -32, -31, -30, -30, -29, -29, -29, -29, -28, -28, -28, -27, -27, -27, -26, -26, -26, -26, -27, -27, -28, -28, -29, -29, -30, -30, -30, -30, -29, -29, -29, -28, -28, -27, -27, -26, -25, -25, -24, -23, -23, -22, -22, -23, -23, -24, -24, -25, -25, -25, -25, -25, -25, -25, -25, -24, -25, -25, -25, -25, -25, -25, -25, -24, -23, -22, -21, -19, -18, -18, -17, -17, -17, -18, -18, -18, -19, -19, -19, -19, -18, -18, -18, -17, -17, -17, -17, -17, -17, -17, -17, -17, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -15, -15, -15, -15, -16, -16, -16, -16, -16, -16, -16, -15, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10, -9, -9, -9, -9, -9, -9, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -12, -12, -12, -13, -13, -14, -14, -14, -15, -15, -16, -16, -16, -17, -17, -18, -18, -19, -19, -20, -20, -20, -21, -21, -21, -22, -22, -22, -23, -23, -24, -24, -24, -25, -25, -26, -26, -26, -27, -28, -28, -29, -29, -30, -30, -31, -32, -32, -32, -33, -33, -34, -34, -34, -35, -35, -35, -35, -35, -35, -35, -36, -36, -36, -36, -36, -36, -36, -36, -37, -37, -37, -37, -36, -36, -36, -36, -36, -37, -37, -37, -37, -37, -37, -37, -36, -36, -36, -35, -35, -36, -36, -37, -37, -38, -38, -38, -37, -37, -36, -35, -35, -34, -34, -35, -36, -37,
- /* -84.0 */ -44, -45, -45, -45, -45, -45, -45, -45, -44, -44, -44, -44, -45, -45, -45, -45, -44, -44, -44, -44, -44, -44, -44, -44, -45, -45, -45, -45, -44, -44, -44, -44, -43, -43, -43, -43, -42, -42, -42, -41, -41, -41, -41, -41, -41, -40, -40, -40, -40, -40, -39, -39, -39, -39, -39, -39, -39, -38, -38, -38, -37, -37, -36, -36, -36, -36, -36, -35, -35, -34, -34, -33, -32, -32, -31, -31, -30, -30, -30, -30, -30, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -27, -27, -26, -26, -26, -25, -25, -24, -24, -24, -24, -24, -25, -25, -26, -26, -26, -25, -25, -24, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -22, -22, -21, -21, -20, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -18, -19, -19, -19, -19, -18, -18, -18, -18, -17, -17, -17, -16, -16, -16, -15, -15, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -15, -15, -15, -15, -15, -15, -15, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -10, -9, -9, -8, -7, -7, -7, -6, -6, -6, -6, -6, -6, -6, -6, -7, -7, -7, -7, -8, -8, -8, -8, -8, -7, -7, -7, -7, -7, -7, -7, -7, -6, -6, -6, -6, -7, -7, -7, -7, -7, -6, -6, -6, -6, -6, -6, -6, -7, -7, -8, -8, -9, -9, -10, -10, -10, -11, -11, -12, -12, -13, -13, -13, -14, -14, -15, -15, -16, -16, -17, -17, -18, -18, -19, -19, -20, -20, -21, -22, -22, -22, -23, -23, -24, -24, -25, -26, -26, -27, -28, -28, -29, -30, -30, -31, -32, -33, -33, -34, -35, -35, -35, -36, -36, -36, -36, -37, -37, -37, -37, -37, -37, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -37, -37, -37, -36, -36, -35, -35, -34, -34, -34, -34, -34, -34, -34, -35, -36, -37, -38, -39, -41, -41, -42, -42, -42, -42, -42, -42, -43, -43, -44,
- /* -83.0 */ -45, -45, -46, -46, -46, -46, -46, -46, -46, -46, -47, -47, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -45, -45, -44, -44, -44, -44, -44, -44, -44, -43, -43, -43, -43, -42, -42, -42, -42, -42, -42, -42, -41, -41, -41, -41, -41, -40, -40, -40, -39, -39, -38, -38, -38, -37, -37, -36, -36, -35, -35, -34, -33, -32, -32, -31, -31, -30, -30, -29, -29, -29, -29, -30, -30, -30, -30, -30, -30, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -27, -27, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -25, -24, -24, -23, -22, -22, -21, -21, -20, -20, -20, -21, -21, -21, -21, -21, -21, -20, -20, -19, -19, -18, -18, -18, -18, -17, -17, -17, -17, -17, -18, -18, -18, -18, -18, -17, -16, -16, -15, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -13, -13, -12, -12, -12, -12, -12, -12, -11, -11, -11, -10, -10, -10, -11, -11, -11, -11, -10, -10, -9, -8, -6, -5, -5, -4, -3, -3, -2, -2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -4, -4, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -3, -3, -4, -4, -5, -5, -6, -6, -6, -7, -7, -8, -8, -9, -9, -10, -10, -11, -11, -12, -12, -13, -14, -15, -15, -16, -17, -18, -18, -19, -20, -20, -21, -22, -22, -23, -23, -24, -25, -25, -26, -27, -28, -28, -29, -30, -31, -31, -32, -32, -33, -34, -34, -35, -36, -37, -37, -38, -39, -39, -39, -39, -39, -39, -39, -40, -40, -41, -41, -41, -41, -41, -41, -40, -40, -40, -40, -40, -40, -40, -39, -39, -38, -37, -37, -36, -36, -36, -37, -38, -38, -39, -39, -40, -40, -41, -41, -42, -42, -43, -44, -44, -44, -45, -45, -45, -45, -45, -45,
- /* -82.0 */ -48, -48, -48, -48, -48, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -48, -48, -48, -48, -48, -48, -47, -47, -47, -46, -46, -46, -46, -46, -45, -45, -45, -45, -45, -45, -44, -44, -44, -43, -43, -43, -42, -42, -42, -42, -42, -42, -41, -41, -41, -40, -39, -39, -38, -38, -37, -37, -36, -36, -35, -35, -35, -34, -34, -33, -33, -33, -32, -32, -31, -31, -30, -30, -30, -30, -30, -30, -30, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -28, -28, -29, -29, -29, -28, -28, -28, -27, -27, -27, -27, -26, -26, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -24, -24, -23, -23, -23, -23, -24, -24, -24, -23, -22, -21, -20, -20, -20, -20, -19, -19, -19, -18, -17, -17, -17, -17, -17, -17, -17, -16, -15, -14, -13, -12, -12, -12, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -11, -10, -10, -10, -10, -10, -9, -9, -9, -9, -9, -9, -9, -8, -8, -8, -7, -7, -6, -6, -5, -5, -4, -3, -2, -1, -0, 0, 1, 1, 1, 1, 1, 1, 0, 0, -0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -0, -0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 0, -0, -1, -1, -2, -3, -3, -4, -4, -5, -6, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16, -16, -17, -18, -19, -19, -20, -21, -21, -22, -23, -24, -25, -26, -26, -27, -28, -29, -30, -31, -31, -32, -33, -33, -34, -35, -36, -37, -38, -39, -40, -41, -41, -40, -40, -41, -41, -42, -43, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -43, -43, -42, -41, -40, -40, -41, -42, -44, -45, -45, -46, -46, -46, -47, -47, -47, -47, -47, -47, -47, -48, -48, -48, -48, -48, -48, -48,
- /* -81.0 */ -50, -50, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -49, -49, -49, -48, -48, -48, -47, -47, -47, -46, -46, -46, -46, -45, -45, -44, -44, -43, -42, -41, -41, -41, -41, -41, -41, -40, -40, -40, -40, -39, -39, -38, -38, -37, -37, -37, -36, -36, -36, -35, -35, -34, -33, -32, -32, -32, -31, -31, -30, -29, -28, -28, -27, -27, -27, -27, -26, -26, -26, -26, -26, -26, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -26, -26, -25, -25, -25, -25, -24, -24, -23, -23, -23, -23, -23, -23, -24, -24, -24, -24, -25, -25, -25, -25, -25, -25, -25, -24, -24, -23, -23, -22, -22, -22, -21, -21, -20, -20, -20, -20, -20, -20, -19, -19, -18, -18, -17, -16, -16, -16, -16, -16, -15, -15, -15, -14, -14, -13, -13, -13, -13, -13, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10, -9, -9, -9, -9, -8, -8, -7, -7, -7, -7, -7, -6, -6, -6, -6, -5, -5, -4, -3, -3, -2, -2, -1, -1, -0, 0, 1, 2, 2, 3, 3, 3, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 5, 5, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 4, 3, 2, 2, 1, 1, -0, -1, -1, -1, -2, -3, -4, -5, -6, -8, -9, -10, -11, -11, -13, -14, -15, -15, -16, -17, -18, -19, -20, -21, -21, -22, -24, -25, -26, -27, -28, -29, -30, -30, -31, -32, -33, -33, -34, -35, -36, -37, -38, -39, -39, -40, -40, -40, -41, -41, -42, -43, -44, -45, -46, -46, -47, -47, -47, -47, -47, -47, -48, -48, -48, -48, -48, -49, -49, -50, -49, -48, -47, -45, -45, -46, -47, -48, -50, -50, -50, -50, -49, -49, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50,
- /* -80.0 */ -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -52, -52, -53, -53, -53, -53, -53, -53, -53, -52, -52, -52, -52, -52, -53, -53, -52, -52, -52, -51, -51, -51, -51, -50, -50, -49, -49, -49, -48, -48, -48, -47, -47, -47, -46, -46, -45, -44, -42, -42, -41, -41, -41, -41, -41, -40, -40, -40, -39, -39, -38, -38, -38, -38, -38, -38, -38, -38, -38, -37, -36, -35, -34, -33, -33, -32, -31, -30, -29, -28, -27, -26, -26, -25, -25, -24, -23, -23, -22, -22, -23, -23, -23, -22, -22, -22, -22, -23, -24, -25, -25, -25, -24, -24, -23, -23, -23, -23, -23, -22, -22, -21, -21, -21, -21, -21, -20, -20, -20, -21, -21, -21, -22, -22, -22, -22, -22, -21, -21, -20, -19, -18, -17, -17, -17, -17, -18, -18, -18, -18, -18, -17, -17, -17, -17, -18, -19, -19, -18, -17, -16, -15, -15, -15, -15, -15, -15, -14, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -10, -10, -9, -9, -9, -9, -8, -8, -7, -7, -7, -7, -7, -6, -6, -5, -5, -4, -4, -3, -3, -3, -2, -2, -2, -1, -1, -0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4, 4, 3, 3, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 8, 9, 9, 9, 8, 8, 7, 7, 7, 6, 5, 5, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 5, 4, 4, 3, 3, 2, 2, 1, 0, -0, -1, -1, -2, -3, -4, -6, -7, -8, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -27, -28, -29, -30, -30, -31, -32, -33, -34, -35, -36, -37, -38, -39, -39, -40, -40, -40, -41, -42, -42, -43, -44, -44, -45, -46, -47, -48, -49, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -51, -51, -51, -51, -51, -51, -52, -53, -54, -55, -54, -54, -53, -52, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -52, -52, -52, -52, -53,
- /* -79.0 */ -54, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -54, -54, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -52, -51, -51, -50, -50, -50, -50, -50, -51, -51, -51, -50, -49, -48, -47, -47, -46, -46, -45, -44, -43, -42, -42, -41, -41, -41, -41, -40, -40, -39, -39, -38, -37, -37, -36, -36, -36, -36, -36, -35, -35, -34, -34, -34, -34, -33, -32, -31, -31, -30, -29, -28, -27, -26, -26, -25, -23, -22, -21, -20, -19, -18, -16, -15, -17, -20, -23, -25, -25, -24, -23, -23, -23, -23, -23, -23, -22, -22, -22, -21, -20, -20, -20, -20, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -17, -17, -16, -15, -15, -15, -15, -16, -16, -16, -16, -16, -15, -15, -15, -15, -14, -15, -15, -15, -14, -13, -12, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10, -9, -9, -9, -9, -8, -8, -8, -7, -7, -6, -6, -5, -5, -5, -5, -5, -5, -5, -4, -3, -3, -2, -2, -1, -1, -0, -0, 0, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 9, 9, 10, 10, 10, 10, 9, 8, 8, 7, 7, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 3, 3, 2, 2, 1, 0, -0, -1, -2, -2, -3, -3, -5, -7, -8, -10, -11, -12, -12, -13, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -26, -27, -28, -29, -30, -31, -32, -33, -34, -35, -36, -37, -38, -39, -40, -41, -41, -41, -42, -42, -43, -44, -44, -45, -46, -47, -48, -49, -50, -51, -51, -52, -52, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -52, -52, -53, -54, -56, -57, -57, -56, -55, -54, -53, -53, -53, -52, -52, -53, -53, -53, -52, -52, -53, -53, -54, -54, -54,
- /* -78.0 */ -56, -56, -57, -57, -57, -57, -57, -56, -56, -56, -57, -57, -57, -56, -56, -56, -56, -56, -56, -56, -55, -54, -54, -54, -53, -53, -53, -54, -54, -54, -53, -52, -52, -52, -51, -51, -51, -50, -51, -51, -51, -51, -49, -48, -47, -46, -46, -45, -45, -44, -42, -41, -40, -40, -39, -40, -40, -39, -39, -38, -38, -37, -36, -36, -35, -35, -35, -35, -34, -34, -34, -34, -34, -34, -34, -33, -33, -32, -31, -31, -31, -30, -29, -28, -27, -26, -24, -22, -21, -20, -19, -17, -15, -13, -15, -18, -22, -24, -24, -22, -21, -20, -20, -21, -21, -21, -21, -20, -19, -19, -19, -19, -18, -18, -17, -17, -17, -17, -17, -17, -16, -16, -16, -16, -16, -16, -16, -15, -16, -16, -16, -15, -14, -14, -14, -14, -15, -15, -15, -15, -15, -14, -14, -14, -13, -11, -10, -9, -9, -9, -9, -9, -8, -8, -8, -8, -8, -8, -7, -6, -6, -6, -5, -5, -5, -5, -4, -4, -4, -4, -4, -4, -3, -3, -3, -3, -2, -2, -1, -1, -2, -3, -2, -2, -1, -0, 0, 1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 11, 10, 10, 9, 9, 9, 9, 8, 8, 7, 7, 6, 6, 6, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 2, 2, 1, 1, -0, -1, -2, -2, -2, -2, -3, -4, -5, -6, -8, -9, -10, -12, -13, -14, -15, -17, -18, -20, -22, -22, -22, -22, -23, -24, -25, -26, -27, -29, -30, -32, -33, -34, -35, -36, -37, -38, -39, -40, -41, -42, -42, -42, -42, -43, -44, -44, -45, -46, -47, -49, -50, -50, -51, -51, -52, -53, -54, -55, -55, -56, -56, -57, -57, -57, -56, -56, -56, -55, -55, -54, -53, -52, -52, -53, -54, -55, -55, -54, -53, -53, -53, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -55, -56, -56,
- /* -77.0 */ -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -59, -59, -59, -59, -58, -57, -57, -57, -57, -56, -56, -56, -56, -55, -55, -55, -55, -54, -53, -53, -52, -51, -50, -49, -48, -47, -46, -46, -45, -44, -43, -43, -43, -42, -42, -41, -40, -39, -38, -37, -36, -36, -37, -37, -38, -37, -37, -37, -37, -36, -36, -36, -36, -35, -35, -35, -35, -35, -34, -34, -33, -32, -32, -31, -31, -30, -29, -28, -27, -26, -26, -25, -24, -23, -22, -21, -21, -20, -19, -18, -18, -18, -20, -20, -20, -18, -17, -16, -17, -19, -21, -21, -20, -19, -19, -18, -18, -18, -17, -17, -17, -17, -17, -16, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -10, -9, -7, -5, -5, -4, -3, -3, -2, -2, -2, -1, -1, -1, -2, -1, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 1, 1, 2, 2, 3, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 13, 13, 13, 13, 13, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 10, 10, 9, 9, 10, 10, 10, 9, 8, 7, 7, 6, 6, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 2, 2, 2, 1, 1, 0, 0, -0, -1, -2, -3, -4, -5, -7, -8, -9, -10, -12, -14, -16, -18, -19, -19, -19, -19, -20, -20, -21, -22, -24, -26, -27, -29, -30, -32, -33, -34, -35, -36, -37, -38, -39, -40, -41, -42, -42, -42, -42, -44, -45, -45, -46, -48, -49, -50, -50, -50, -51, -52, -53, -54, -55, -56, -56, -57, -57, -58, -58, -57, -57, -57, -56, -56, -55, -55, -54, -53, -52, -53, -54, -55, -55, -55, -55, -55, -55, -55, -56, -57, -57, -56, -55, -55, -56, -56, -57, -57, -57, -58,
- /* -76.0 */ -60, -60, -60, -60, -60, -60, -59, -59, -59, -59, -59, -59, -59, -59, -59, -60, -61, -62, -62, -62, -63, -63, -63, -63, -63, -63, -61, -60, -58, -57, -56, -55, -54, -54, -53, -52, -50, -49, -48, -47, -45, -44, -43, -43, -42, -41, -41, -40, -41, -41, -40, -38, -37, -36, -36, -36, -36, -36, -37, -37, -37, -36, -36, -36, -36, -35, -33, -32, -32, -32, -32, -32, -31, -30, -30, -29, -28, -28, -27, -27, -26, -26, -25, -25, -24, -23, -23, -22, -22, -22, -21, -20, -19, -19, -19, -19, -19, -19, -18, -18, -18, -18, -19, -18, -18, -17, -18, -18, -17, -15, -13, -13, -13, -13, -14, -15, -15, -14, -13, -12, -12, -13, -13, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -10, -10, -9, -9, -9, -8, -8, -8, -8, -8, -8, -8, -8, -8, -7, -7, -7, -7, -6, -6, -5, -4, -3, -3, -2, -2, -1, -1, -1, -1, -0, 1, 3, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 7, 7, 8, 8, 8, 9, 9, 10, 10, 10, 11, 12, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 15, 15, 15, 14, 13, 12, 13, 13, 13, 13, 12, 12, 12, 13, 13, 13, 13, 12, 12, 12, 12, 12, 13, 13, 13, 14, 13, 13, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 10, 9, 8, 7, 7, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 3, 4, 4, 3, 0, -2, -4, -5, -5, -6, -7, -8, -9, -10, -12, -13, -15, -16, -17, -18, -18, -19, -20, -21, -23, -24, -26, -28, -29, -30, -32, -33, -35, -35, -36, -37, -37, -38, -39, -40, -41, -41, -41, -42, -43, -45, -46, -47, -49, -50, -50, -50, -50, -51, -52, -53, -54, -55, -56, -56, -57, -57, -58, -58, -58, -58, -57, -57, -56, -56, -57, -57, -56, -55, -54, -55, -57, -58, -58, -58, -57, -57, -57, -57, -58, -58, -58, -58, -57, -58, -58, -58, -59, -59, -60,
- /* -75.0 */ -62, -62, -62, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -64, -64, -64, -64, -64, -64, -64, -64, -63, -63, -63, -63, -62, -62, -62, -61, -60, -58, -56, -54, -52, -51, -50, -49, -48, -47, -47, -46, -44, -44, -44, -44, -44, -43, -42, -40, -39, -39, -39, -38, -38, -37, -37, -37, -36, -36, -36, -37, -36, -35, -33, -32, -31, -30, -30, -29, -29, -28, -27, -27, -26, -26, -26, -26, -25, -25, -24, -23, -22, -21, -21, -21, -20, -20, -19, -19, -18, -18, -17, -17, -17, -17, -16, -16, -15, -15, -16, -15, -13, -12, -10, -9, -8, -7, -6, -6, -5, -5, -6, -9, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -9, -9, -9, -9, -9, -8, -8, -8, -7, -7, -6, -6, -5, -5, -4, -4, -4, -3, -3, -3, -2, -2, -2, -2, -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, -1, -1, 0, 2, 3, 4, 5, 6, 8, 9, 10, 10, 10, 11, 11, 11, 11, 11, 11, 10, 9, 9, 9, 10, 11, 11, 11, 11, 12, 13, 13, 13, 14, 14, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 16, 16, 15, 15, 15, 16, 16, 16, 15, 14, 15, 16, 16, 16, 16, 16, 16, 16, 15, 15, 16, 17, 17, 16, 15, 15, 15, 14, 14, 14, 13, 12, 12, 12, 13, 13, 13, 12, 11, 10, 9, 9, 9, 8, 8, 8, 8, 8, 7, 7, 7, 6, 6, 6, 6, 6, 5, 5, 5, 4, 2, -0, -2, -3, -4, -5, -6, -7, -8, -9, -11, -12, -14, -15, -16, -17, -18, -19, -21, -23, -25, -26, -27, -29, -30, -31, -32, -33, -34, -35, -36, -36, -37, -37, -38, -39, -41, -42, -42, -43, -43, -45, -46, -48, -48, -48, -48, -49, -50, -51, -51, -52, -53, -54, -55, -55, -56, -57, -57, -57, -58, -58, -58, -58, -58, -58, -58, -58, -59, -58, -56, -54, -54, -55, -57, -58, -58, -58, -58, -58, -59, -59, -59, -59, -59, -59, -59, -59, -60, -61, -62,
- /* -74.0 */ -61, -62, -63, -63, -64, -65, -65, -65, -65, -66, -66, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -64, -64, -64, -63, -63, -63, -63, -62, -62, -61, -61, -60, -59, -59, -58, -58, -57, -56, -55, -53, -51, -50, -49, -49, -49, -49, -47, -45, -43, -43, -43, -41, -40, -39, -39, -38, -38, -37, -37, -37, -37, -38, -38, -38, -36, -35, -33, -32, -31, -31, -30, -30, -29, -28, -28, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -19, -19, -18, -18, -18, -17, -16, -16, -16, -16, -17, -16, -16, -14, -13, -13, -13, -12, -11, -10, -8, -7, -6, -6, -5, -3, -2, -1, -1, -1, -2, -4, -6, -7, -7, -7, -8, -8, -7, -7, -6, -6, -5, -5, -5, -5, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -3, -3, -2, -1, -1, -0, -0, -1, -1, -1, -2, -2, -1, -1, -0, 1, 1, 2, 2, 3, 3, 3, 4, 5, 6, 7, 7, 8, 9, 10, 11, 13, 14, 14, 13, 13, 12, 11, 11, 12, 13, 14, 14, 15, 15, 16, 16, 16, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 19, 18, 18, 18, 18, 19, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 20, 20, 20, 20, 20, 19, 18, 18, 18, 19, 19, 18, 18, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 17, 16, 14, 12, 12, 12, 13, 13, 13, 12, 11, 10, 10, 9, 9, 9, 8, 8, 7, 7, 6, 5, 5, 4, 3, 1, -0, -2, -3, -4, -6, -7, -8, -9, -11, -12, -14, -15, -17, -18, -20, -21, -24, -26, -27, -28, -29, -29, -30, -31, -32, -33, -34, -35, -36, -36, -37, -38, -39, -40, -41, -42, -42, -42, -44, -46, -47, -46, -45, -46, -47, -49, -50, -50, -50, -51, -51, -52, -53, -55, -56, -56, -57, -57, -58, -58, -58, -58, -59, -59, -59, -58, -57, -55, -53, -50, -48, -49, -53, -56, -58, -59, -58, -59, -59, -59, -59, -59, -59, -60, -60, -60, -61, -61,
- /* -73.0 */ -61, -61, -62, -63, -64, -64, -65, -65, -66, -66, -66, -66, -66, -65, -65, -65, -65, -65, -65, -65, -64, -64, -64, -64, -63, -63, -63, -62, -62, -61, -61, -60, -60, -59, -58, -58, -57, -57, -56, -55, -55, -54, -53, -52, -52, -51, -50, -50, -49, -47, -46, -45, -44, -42, -40, -40, -40, -39, -38, -38, -37, -36, -36, -35, -35, -35, -34, -34, -33, -33, -32, -32, -31, -31, -29, -28, -27, -26, -25, -25, -24, -23, -22, -22, -22, -21, -21, -21, -20, -18, -18, -18, -18, -17, -17, -17, -16, -16, -15, -15, -14, -13, -12, -11, -10, -9, -8, -7, -5, -3, -2, -1, 0, 1, 2, 3, 3, 2, -1, -3, -4, -4, -4, -5, -4, -3, -3, -2, -2, -2, -2, -1, -1, -1, -2, -2, -2, -3, -3, -4, -4, -4, -5, -5, -4, -4, -3, -3, -3, -2, -2, -2, -2, -2, -2, -2, -2, -1, 0, 1, 2, 3, 4, 6, 7, 7, 7, 7, 8, 8, 8, 9, 11, 13, 15, 15, 14, 13, 12, 13, 13, 14, 15, 16, 17, 18, 18, 19, 18, 18, 18, 18, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 19, 19, 20, 23, 23, 22, 21, 21, 21, 20, 21, 22, 22, 22, 21, 22, 22, 23, 23, 24, 23, 22, 22, 21, 21, 21, 22, 22, 21, 21, 20, 20, 19, 19, 19, 19, 19, 19, 20, 21, 21, 20, 20, 20, 20, 20, 19, 17, 14, 12, 13, 14, 15, 16, 16, 14, 13, 13, 13, 12, 11, 11, 10, 9, 8, 7, 6, 5, 5, 4, 3, 2, 0, -0, -1, -3, -5, -7, -8, -9, -11, -13, -15, -17, -18, -20, -22, -24, -27, -28, -29, -28, -29, -30, -31, -31, -32, -33, -33, -34, -35, -36, -37, -38, -39, -40, -40, -38, -39, -41, -43, -43, -43, -43, -45, -46, -48, -50, -49, -49, -49, -50, -51, -52, -53, -54, -55, -56, -57, -57, -57, -58, -58, -58, -59, -58, -58, -56, -55, -54, -52, -51, -51, -52, -55, -58, -58, -57, -57, -58, -58, -58, -58, -59, -60, -61, -61, -61, -61,
- /* -72.0 */ -62, -62, -62, -62, -63, -64, -65, -66, -66, -66, -66, -65, -65, -65, -65, -65, -64, -64, -64, -64, -63, -63, -63, -63, -62, -62, -62, -61, -61, -60, -60, -59, -59, -59, -58, -57, -56, -56, -55, -54, -54, -53, -52, -52, -51, -51, -50, -49, -48, -47, -46, -45, -45, -44, -44, -43, -42, -41, -40, -39, -38, -37, -35, -34, -33, -33, -33, -33, -32, -32, -31, -31, -30, -30, -29, -28, -27, -26, -25, -24, -23, -23, -22, -21, -21, -22, -22, -22, -20, -18, -17, -17, -17, -16, -15, -15, -15, -14, -13, -13, -12, -12, -11, -10, -9, -7, -6, -4, -2, -0, 2, 2, 3, 4, 6, 7, 7, 6, 3, 1, -0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, -2, -2, -2, -2, -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -0, -0, 0, 1, 2, 4, 6, 7, 8, 8, 8, 9, 10, 10, 10, 12, 14, 14, 13, 13, 13, 12, 12, 13, 13, 14, 16, 17, 18, 17, 17, 16, 15, 16, 15, 15, 16, 16, 16, 17, 18, 17, 17, 18, 19, 20, 21, 23, 23, 21, 20, 21, 22, 22, 22, 22, 23, 25, 26, 26, 26, 26, 26, 25, 25, 24, 22, 21, 22, 23, 24, 24, 24, 24, 23, 21, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 20, 18, 16, 14, 13, 13, 13, 13, 14, 15, 15, 15, 15, 15, 14, 13, 13, 12, 11, 10, 9, 8, 6, 5, 5, 4, 3, 2, 1, -1, -3, -5, -6, -8, -9, -11, -12, -14, -16, -17, -19, -20, -22, -24, -26, -27, -27, -28, -29, -30, -31, -32, -32, -32, -32, -33, -34, -35, -36, -37, -38, -37, -37, -38, -39, -40, -40, -41, -42, -43, -45, -48, -50, -51, -51, -50, -50, -51, -52, -52, -53, -54, -55, -56, -57, -57, -57, -58, -57, -57, -57, -56, -54, -53, -55, -56, -57, -56, -55, -55, -56, -55, -53, -54, -56, -58, -58, -58, -59, -60, -61, -61, -62, -62,
- /* -71.0 */ -61, -61, -62, -63, -64, -65, -65, -65, -64, -65, -66, -65, -64, -64, -64, -64, -63, -63, -63, -63, -62, -62, -62, -61, -61, -61, -61, -60, -60, -59, -59, -58, -58, -57, -57, -56, -56, -55, -54, -53, -53, -52, -51, -51, -50, -49, -48, -47, -47, -46, -45, -44, -43, -43, -42, -42, -41, -40, -40, -40, -39, -39, -38, -38, -37, -36, -36, -35, -34, -34, -33, -32, -32, -30, -28, -27, -27, -26, -25, -24, -24, -23, -22, -22, -22, -21, -20, -18, -17, -17, -16, -15, -14, -14, -14, -14, -14, -13, -12, -11, -11, -10, -10, -8, -7, -6, -4, -3, -1, 0, 3, 4, 5, 7, 10, 11, 11, 10, 8, 5, 4, 3, 2, 1, 1, -0, -1, -2, -2, -1, -1, -1, -1, -1, -1, -0, -0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 5, 7, 8, 10, 11, 11, 11, 11, 11, 11, 10, 11, 11, 11, 13, 13, 13, 12, 13, 13, 14, 14, 14, 13, 12, 12, 11, 11, 11, 12, 13, 14, 15, 16, 16, 16, 18, 20, 22, 22, 22, 22, 21, 20, 20, 21, 22, 22, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 24, 25, 25, 26, 26, 25, 24, 23, 23, 23, 23, 22, 23, 23, 22, 21, 23, 25, 25, 25, 23, 21, 18, 15, 15, 16, 16, 16, 16, 16, 16, 15, 16, 16, 15, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 3, 1, -1, -2, -4, -5, -6, -7, -9, -10, -11, -13, -14, -15, -17, -18, -19, -20, -22, -24, -25, -26, -27, -27, -28, -29, -30, -31, -31, -32, -32, -33, -34, -34, -35, -35, -36, -37, -38, -39, -39, -40, -42, -43, -44, -46, -47, -48, -49, -49, -50, -51, -52, -52, -52, -53, -55, -56, -57, -57, -57, -58, -57, -57, -57, -56, -54, -55, -57, -59, -59, -60, -59, -58, -58, -58, -57, -57, -58, -59, -59, -59, -59, -60, -61, -61, -61, -61,
- /* -70.0 */ -62, -62, -63, -64, -64, -64, -64, -64, -63, -63, -63, -63, -63, -63, -62, -62, -62, -62, -62, -62, -61, -61, -61, -60, -60, -60, -60, -59, -58, -58, -57, -57, -56, -56, -55, -55, -54, -54, -53, -52, -52, -51, -50, -49, -48, -47, -47, -46, -45, -45, -44, -43, -42, -41, -40, -40, -40, -40, -39, -38, -37, -36, -36, -36, -35, -35, -34, -34, -34, -33, -33, -33, -32, -32, -31, -31, -30, -29, -28, -27, -26, -26, -27, -27, -27, -25, -22, -21, -22, -22, -21, -19, -17, -15, -13, -12, -11, -10, -10, -10, -10, -9, -7, -6, -4, -4, -3, -2, 0, 2, 4, 5, 7, 10, 12, 13, 13, 11, 8, 6, 5, 4, 4, 4, 2, 1, -1, -1, -1, -0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 4, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 11, 11, 10, 11, 13, 14, 14, 14, 15, 15, 15, 15, 15, 14, 14, 14, 14, 16, 17, 17, 17, 18, 18, 17, 16, 16, 17, 19, 20, 21, 21, 21, 21, 20, 20, 21, 21, 20, 21, 22, 21, 21, 20, 19, 20, 21, 22, 23, 25, 27, 27, 26, 27, 27, 26, 27, 27, 28, 28, 28, 27, 26, 26, 26, 25, 26, 26, 25, 26, 28, 28, 26, 24, 22, 20, 17, 17, 17, 17, 17, 17, 16, 16, 16, 15, 16, 16, 15, 14, 14, 13, 12, 11, 11, 9, 8, 8, 7, 6, 4, 3, 1, -1, -2, -4, -6, -7, -9, -10, -12, -13, -14, -16, -17, -18, -18, -19, -19, -22, -24, -24, -25, -26, -27, -28, -29, -30, -30, -31, -32, -32, -33, -34, -34, -36, -37, -37, -38, -38, -39, -42, -44, -44, -43, -43, -44, -45, -46, -47, -49, -51, -51, -51, -52, -54, -55, -55, -56, -57, -56, -56, -56, -56, -55, -55, -56, -57, -57, -57, -57, -57, -58, -59, -59, -59, -59, -58, -58, -59, -59, -59, -60, -60, -61, -61, -62,
- /* -69.0 */ -61, -61, -61, -62, -63, -63, -63, -63, -62, -61, -61, -60, -60, -60, -60, -59, -59, -59, -59, -59, -59, -59, -58, -59, -58, -58, -57, -57, -57, -56, -56, -55, -55, -54, -54, -53, -52, -52, -51, -51, -50, -49, -49, -48, -47, -46, -45, -45, -44, -43, -42, -42, -41, -40, -40, -39, -39, -38, -37, -36, -36, -36, -35, -35, -34, -34, -34, -33, -33, -32, -32, -31, -31, -31, -30, -29, -29, -28, -28, -27, -26, -26, -25, -25, -25, -24, -22, -21, -19, -17, -16, -16, -16, -15, -14, -14, -13, -12, -11, -9, -8, -7, -7, -6, -4, -3, -2, 0, 3, 4, 5, 6, 7, 9, 11, 12, 11, 9, 8, 7, 7, 6, 7, 7, 6, 5, 3, 3, 3, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 4, 4, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 7, 7, 8, 8, 9, 10, 9, 9, 9, 9, 10, 11, 10, 10, 11, 11, 12, 13, 13, 14, 14, 14, 15, 16, 15, 15, 16, 16, 16, 15, 15, 15, 16, 16, 16, 17, 17, 18, 18, 18, 19, 21, 23, 23, 23, 24, 24, 22, 21, 21, 21, 23, 24, 24, 25, 27, 28, 28, 28, 26, 27, 29, 31, 33, 34, 32, 30, 30, 30, 29, 28, 28, 27, 27, 28, 29, 29, 27, 25, 23, 22, 20, 19, 18, 17, 16, 16, 16, 16, 17, 17, 17, 16, 15, 14, 14, 13, 13, 12, 11, 11, 10, 9, 9, 8, 8, 7, 5, 2, 0, -2, -5, -6, -8, -10, -11, -13, -15, -16, -17, -18, -18, -19, -19, -20, -22, -23, -24, -25, -26, -26, -27, -28, -29, -30, -30, -31, -32, -33, -35, -36, -37, -37, -37, -37, -37, -40, -43, -43, -42, -42, -43, -44, -44, -46, -47, -48, -50, -51, -51, -52, -53, -53, -54, -54, -53, -53, -53, -53, -54, -55, -55, -55, -56, -57, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -59, -60, -60, -60, -60, -61, -61,
- /* -68.0 */ -58, -59, -60, -61, -61, -62, -61, -60, -59, -58, -58, -58, -58, -58, -57, -57, -57, -56, -56, -56, -56, -56, -56, -56, -56, -55, -55, -55, -55, -54, -54, -53, -53, -52, -52, -51, -50, -50, -49, -49, -48, -48, -47, -46, -46, -45, -44, -44, -43, -42, -41, -40, -40, -39, -38, -38, -37, -37, -36, -36, -36, -35, -35, -34, -33, -33, -32, -32, -31, -31, -30, -30, -30, -29, -29, -28, -28, -28, -27, -26, -26, -25, -24, -24, -23, -22, -22, -21, -20, -19, -18, -17, -16, -15, -14, -14, -13, -12, -11, -11, -10, -9, -8, -7, -5, -3, -1, 1, 2, 3, 5, 6, 7, 7, 8, 8, 9, 9, 9, 8, 9, 8, 9, 10, 9, 8, 7, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 8, 8, 8, 9, 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 14, 14, 15, 16, 15, 14, 15, 15, 15, 14, 14, 15, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 18, 19, 22, 23, 23, 23, 24, 25, 25, 25, 25, 25, 24, 25, 26, 26, 27, 29, 30, 32, 35, 36, 37, 38, 38, 36, 34, 34, 34, 32, 31, 30, 30, 30, 29, 28, 27, 27, 25, 24, 23, 21, 20, 19, 18, 17, 17, 17, 18, 17, 16, 15, 15, 14, 13, 13, 12, 10, 10, 11, 9, 9, 10, 9, 7, 6, 4, 2, 1, -2, -3, -5, -8, -9, -11, -12, -13, -14, -16, -17, -18, -18, -18, -18, -19, -22, -24, -25, -26, -26, -27, -28, -29, -29, -29, -30, -31, -34, -35, -36, -37, -37, -37, -37, -37, -39, -41, -41, -41, -41, -41, -43, -44, -45, -46, -48, -49, -50, -51, -52, -52, -52, -53, -53, -52, -51, -51, -51, -51, -53, -53, -54, -55, -55, -55, -55, -55, -55, -55, -55, -56, -56, -57, -57, -57, -58, -58, -59, -59, -59, -58,
- /* -67.0 */ -58, -58, -59, -58, -58, -57, -56, -56, -56, -56, -56, -55, -55, -55, -55, -54, -54, -54, -54, -54, -54, -54, -53, -53, -53, -52, -52, -52, -51, -51, -51, -51, -50, -49, -49, -48, -47, -47, -46, -46, -46, -46, -45, -45, -44, -44, -43, -42, -42, -41, -40, -39, -38, -38, -37, -37, -36, -36, -36, -35, -35, -35, -34, -34, -33, -32, -32, -31, -31, -30, -29, -29, -29, -28, -28, -27, -27, -27, -26, -26, -25, -25, -24, -23, -22, -21, -21, -20, -19, -18, -17, -16, -16, -14, -13, -13, -12, -11, -10, -10, -9, -7, -6, -5, -4, -2, -1, 2, 4, 5, 6, 8, 9, 9, 9, 10, 11, 12, 12, 11, 11, 11, 12, 12, 13, 12, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 9, 9, 10, 10, 11, 11, 11, 11, 12, 13, 13, 13, 14, 15, 15, 15, 16, 16, 16, 16, 16, 16, 15, 16, 16, 16, 16, 16, 15, 15, 16, 16, 17, 17, 18, 18, 18, 18, 20, 22, 22, 22, 23, 23, 23, 24, 25, 26, 26, 26, 26, 27, 29, 31, 32, 33, 34, 36, 39, 41, 41, 39, 35, 33, 32, 31, 30, 30, 29, 28, 27, 26, 26, 24, 23, 24, 25, 25, 24, 22, 20, 19, 18, 18, 18, 17, 16, 16, 16, 15, 14, 14, 12, 10, 10, 10, 9, 8, 8, 6, 4, 3, 1, -1, -1, -2, -3, -3, -6, -8, -9, -11, -12, -13, -15, -17, -18, -18, -18, -17, -18, -22, -25, -26, -27, -28, -28, -28, -29, -29, -30, -31, -32, -34, -36, -37, -37, -36, -37, -38, -39, -40, -40, -40, -40, -40, -41, -42, -43, -44, -45, -47, -48, -49, -49, -49, -49, -49, -49, -49, -49, -48, -49, -50, -50, -50, -51, -51, -51, -50, -50, -51, -52, -53, -53, -53, -54, -54, -55, -56, -56, -56, -57, -57, -57, -58, -58,
- /* -66.0 */ -55, -54, -53, -53, -54, -54, -54, -54, -54, -53, -53, -53, -53, -52, -52, -52, -52, -52, -52, -52, -52, -51, -51, -50, -50, -50, -50, -50, -49, -49, -48, -48, -47, -47, -46, -45, -45, -45, -44, -43, -43, -43, -43, -43, -42, -42, -42, -41, -41, -40, -39, -38, -38, -37, -36, -36, -35, -35, -34, -34, -34, -33, -33, -32, -32, -32, -31, -30, -30, -29, -28, -28, -27, -27, -26, -26, -25, -25, -25, -24, -24, -23, -23, -22, -21, -20, -20, -19, -19, -17, -16, -16, -15, -14, -13, -12, -12, -11, -10, -8, -7, -7, -5, -4, -3, -2, -0, 1, 2, 5, 7, 9, 10, 11, 12, 13, 14, 15, 16, 15, 15, 14, 14, 15, 16, 16, 14, 13, 13, 12, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 10, 10, 10, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 16, 16, 17, 17, 18, 19, 18, 18, 18, 17, 17, 17, 18, 18, 18, 17, 17, 18, 18, 18, 19, 19, 20, 19, 19, 22, 23, 23, 23, 23, 23, 24, 24, 25, 25, 26, 27, 27, 28, 29, 30, 30, 31, 33, 34, 35, 37, 36, 34, 32, 31, 30, 28, 27, 26, 25, 25, 25, 25, 24, 24, 24, 23, 22, 21, 20, 20, 19, 18, 17, 15, 15, 15, 16, 16, 15, 14, 13, 12, 12, 10, 9, 8, 7, 5, 3, 1, 0, -0, -1, -3, -2, -1, -2, -3, -6, -8, -10, -12, -14, -14, -15, -15, -16, -18, -19, -21, -22, -23, -24, -25, -25, -26, -27, -28, -29, -30, -31, -32, -33, -35, -36, -36, -37, -37, -38, -39, -39, -40, -41, -42, -42, -42, -42, -43, -44, -45, -45, -45, -46, -46, -46, -45, -46, -47, -49, -48, -47, -47, -47, -47, -47, -48, -48, -48, -48, -49, -49, -49, -50, -51, -52, -52, -52, -53, -54, -54, -55, -55, -55, -55, -55, -55,
- /* -65.0 */ -52, -51, -51, -52, -51, -51, -51, -51, -51, -51, -51, -50, -50, -50, -50, -50, -49, -49, -49, -49, -49, -49, -48, -48, -48, -47, -47, -47, -46, -46, -46, -45, -45, -44, -44, -43, -43, -42, -42, -42, -42, -42, -41, -41, -41, -41, -40, -40, -39, -39, -38, -37, -37, -36, -35, -35, -34, -33, -33, -33, -32, -32, -31, -31, -31, -30, -30, -30, -29, -28, -28, -27, -26, -26, -26, -25, -25, -24, -24, -23, -23, -22, -22, -21, -20, -20, -18, -17, -17, -16, -15, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -2, -1, 0, 1, 2, 4, 5, 6, 8, 11, 13, 14, 15, 15, 16, 18, 18, 18, 18, 18, 18, 19, 19, 16, 15, 15, 14, 13, 13, 14, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 12, 13, 12, 12, 12, 11, 11, 11, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 11, 11, 11, 12, 12, 14, 15, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 19, 19, 20, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 21, 21, 21, 20, 21, 23, 24, 24, 25, 26, 26, 26, 27, 28, 28, 28, 28, 29, 30, 30, 31, 30, 30, 30, 31, 31, 30, 30, 30, 29, 29, 28, 27, 27, 27, 27, 27, 26, 25, 25, 25, 24, 23, 22, 21, 20, 20, 20, 19, 18, 18, 16, 15, 14, 14, 14, 13, 12, 11, 10, 8, 7, 6, 5, 4, 4, 3, 3, 1, 0, -1, -1, -2, -4, -7, -8, -9, -11, -12, -13, -15, -17, -18, -19, -19, -20, -20, -21, -22, -25, -27, -29, -31, -32, -32, -32, -33, -33, -34, -35, -35, -35, -36, -36, -37, -38, -39, -41, -42, -43, -44, -44, -44, -44, -45, -45, -45, -45, -46, -46, -46, -46, -45, -45, -44, -44, -44, -44, -44, -44, -44, -44, -44, -45, -46, -46, -47, -47, -48, -49, -49, -50, -51, -51, -52, -52, -52, -52, -52, -52, -52, -52,
- /* -64.0 */ -51, -51, -50, -50, -50, -50, -50, -49, -49, -49, -48, -48, -48, -48, -47, -47, -47, -47, -47, -46, -46, -45, -45, -45, -45, -45, -44, -43, -43, -43, -43, -42, -42, -42, -42, -41, -41, -40, -40, -40, -40, -39, -39, -39, -39, -39, -38, -38, -37, -37, -36, -36, -35, -35, -34, -33, -33, -32, -32, -31, -31, -31, -30, -30, -29, -29, -29, -28, -28, -27, -27, -26, -26, -25, -25, -24, -24, -23, -23, -23, -22, -21, -21, -20, -19, -18, -17, -17, -16, -15, -14, -13, -13, -12, -12, -11, -10, -9, -8, -6, -5, -4, -3, -1, 0, 1, 2, 3, 4, 6, 7, 8, 10, 11, 14, 16, 17, 18, 18, 19, 21, 21, 21, 21, 22, 22, 20, 18, 17, 15, 15, 16, 16, 17, 17, 17, 17, 17, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 14, 14, 14, 13, 13, 12, 12, 12, 12, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 12, 13, 13, 14, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 20, 20, 20, 21, 21, 20, 20, 20, 20, 21, 21, 21, 21, 21, 22, 22, 22, 23, 23, 23, 23, 24, 25, 26, 27, 27, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 29, 29, 28, 28, 27, 27, 27, 26, 26, 26, 25, 24, 23, 23, 22, 22, 22, 21, 20, 19, 18, 16, 15, 15, 14, 13, 12, 11, 10, 8, 7, 5, 4, 3, 3, 2, 2, 0, 0, -0, -2, -4, -8, -9, -10, -11, -12, -13, -16, -18, -19, -20, -21, -22, -22, -22, -23, -25, -27, -28, -30, -31, -32, -33, -34, -35, -36, -37, -37, -38, -39, -40, -40, -41, -41, -41, -41, -41, -41, -41, -41, -42, -43, -44, -44, -43, -43, -42, -42, -42, -42, -42, -42, -41, -41, -41, -41, -41, -41, -41, -41, -42, -43, -43, -44, -45, -45, -46, -47, -47, -48, -48, -48, -48, -49, -50, -50, -50, -51, -51, -51,
- /* -63.0 */ -50, -50, -49, -49, -49, -49, -48, -48, -47, -47, -47, -46, -46, -45, -45, -45, -44, -44, -44, -43, -43, -43, -42, -42, -42, -41, -41, -41, -40, -40, -40, -40, -39, -39, -39, -39, -38, -38, -38, -38, -38, -37, -37, -37, -37, -36, -36, -36, -35, -35, -35, -34, -33, -33, -33, -32, -32, -31, -30, -30, -30, -29, -29, -28, -28, -28, -27, -27, -26, -26, -26, -25, -25, -24, -24, -23, -23, -22, -22, -21, -21, -20, -20, -19, -18, -17, -17, -16, -15, -14, -13, -13, -12, -12, -11, -10, -10, -8, -7, -6, -5, -4, -3, -1, 0, 2, 3, 4, 5, 6, 8, 9, 10, 12, 13, 14, 15, 15, 17, 19, 21, 22, 23, 24, 24, 23, 22, 22, 21, 20, 20, 19, 19, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16, 15, 15, 14, 14, 14, 13, 13, 13, 12, 12, 12, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 13, 14, 14, 14, 15, 16, 17, 17, 18, 18, 19, 20, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 25, 24, 25, 26, 27, 27, 28, 29, 29, 30, 30, 31, 31, 30, 30, 31, 31, 30, 29, 29, 29, 29, 29, 29, 30, 30, 30, 31, 30, 30, 30, 29, 29, 29, 28, 27, 27, 26, 26, 26, 25, 25, 24, 24, 24, 23, 22, 21, 20, 18, 18, 18, 17, 16, 14, 13, 12, 10, 8, 7, 6, 4, 3, 2, 0, -1, -2, -3, -4, -6, -7, -8, -9, -10, -12, -13, -13, -15, -16, -18, -20, -21, -22, -23, -23, -24, -25, -27, -28, -29, -30, -31, -32, -32, -33, -34, -34, -35, -36, -37, -38, -39, -39, -40, -40, -40, -41, -41, -41, -41, -41, -40, -40, -40, -40, -39, -39, -39, -39, -39, -39, -38, -38, -37, -38, -38, -37, -38, -38, -39, -40, -40, -41, -42, -42, -43, -43, -44, -44, -45, -46, -47, -49, -49, -50, -50, -50, -50, -50, -50,
- /* -62.0 */ -49, -49, -49, -48, -48, -48, -47, -47, -46, -46, -45, -45, -44, -44, -43, -43, -42, -42, -42, -41, -41, -40, -40, -40, -39, -39, -38, -38, -38, -37, -37, -37, -37, -36, -36, -36, -36, -36, -36, -36, -35, -35, -35, -34, -34, -34, -33, -33, -33, -32, -32, -32, -31, -31, -31, -30, -30, -30, -29, -29, -28, -27, -27, -27, -26, -26, -26, -26, -25, -25, -25, -24, -24, -23, -23, -22, -22, -21, -21, -21, -20, -19, -19, -18, -17, -16, -16, -15, -15, -14, -13, -12, -12, -11, -10, -10, -9, -8, -7, -6, -5, -3, -2, -1, 1, 2, 3, 4, 6, 7, 8, 10, 12, 13, 14, 15, 15, 14, 14, 15, 18, 21, 22, 22, 22, 23, 23, 22, 21, 20, 20, 20, 20, 21, 22, 23, 22, 22, 21, 19, 19, 19, 20, 20, 20, 20, 19, 20, 19, 20, 19, 19, 19, 19, 18, 18, 18, 17, 16, 16, 16, 15, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 15, 16, 17, 18, 19, 20, 20, 21, 22, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 26, 26, 26, 26, 27, 27, 28, 29, 30, 30, 31, 32, 32, 32, 32, 32, 32, 31, 31, 31, 31, 31, 31, 30, 30, 31, 31, 31, 31, 31, 31, 31, 30, 30, 30, 29, 28, 28, 28, 28, 27, 27, 26, 26, 25, 25, 24, 23, 22, 22, 22, 21, 21, 20, 19, 17, 15, 13, 12, 10, 9, 7, 6, 4, 2, 1, -0, -1, -2, -3, -5, -6, -7, -8, -9, -9, -10, -11, -13, -14, -15, -16, -18, -19, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30, -31, -32, -32, -33, -34, -34, -35, -35, -36, -36, -36, -37, -37, -38, -38, -38, -39, -39, -38, -37, -37, -37, -37, -37, -36, -36, -36, -36, -35, -35, -34, -35, -35, -35, -35, -35, -36, -37, -37, -38, -39, -39, -40, -41, -42, -43, -45, -47, -48, -48, -48, -48, -49, -49, -49, -49, -49, -49,
- /* -61.0 */ -48, -47, -47, -47, -47, -46, -46, -45, -45, -45, -44, -43, -43, -43, -42, -42, -41, -41, -40, -40, -39, -39, -38, -37, -37, -36, -36, -35, -35, -35, -35, -34, -34, -34, -34, -34, -34, -33, -33, -33, -33, -32, -32, -32, -32, -32, -31, -30, -30, -30, -29, -29, -28, -28, -28, -29, -28, -27, -27, -26, -26, -25, -25, -25, -25, -25, -24, -24, -24, -24, -24, -23, -22, -22, -21, -21, -21, -20, -20, -19, -18, -18, -17, -17, -16, -15, -15, -14, -14, -13, -12, -12, -11, -10, -9, -8, -8, -7, -6, -5, -4, -3, -2, -0, 1, 2, 3, 5, 7, 8, 9, 11, 12, 14, 15, 17, 17, 18, 18, 18, 17, 16, 15, 16, 21, 23, 24, 24, 22, 21, 21, 21, 21, 23, 25, 26, 26, 24, 21, 18, 20, 20, 21, 22, 21, 22, 22, 22, 22, 22, 22, 22, 21, 19, 17, 17, 17, 16, 17, 18, 18, 18, 17, 17, 16, 16, 16, 16, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 26, 26, 26, 27, 28, 28, 28, 28, 28, 29, 29, 30, 31, 31, 32, 32, 33, 33, 33, 33, 33, 33, 32, 32, 32, 32, 32, 31, 31, 31, 31, 31, 31, 31, 32, 32, 32, 31, 31, 31, 30, 30, 30, 30, 29, 29, 28, 28, 27, 27, 26, 26, 25, 25, 24, 24, 23, 23, 22, 21, 19, 17, 14, 12, 11, 9, 8, 6, 5, 3, 2, 1, 0, -1, -2, -4, -5, -6, -7, -8, -8, -9, -10, -11, -13, -14, -15, -16, -17, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30, -30, -31, -31, -32, -33, -33, -34, -34, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -34, -34, -34, -34, -33, -33, -33, -33, -32, -31, -32, -32, -33, -33, -33, -33, -34, -35, -36, -37, -38, -39, -40, -41, -43, -45, -45, -46, -46, -47, -47, -48, -48, -48, -48, -48, -48, -48,
- /* -60.0 */ -46, -46, -46, -45, -45, -45, -44, -44, -44, -43, -43, -43, -42, -41, -41, -40, -40, -39, -39, -38, -37, -37, -36, -35, -35, -34, -34, -33, -33, -33, -32, -32, -32, -32, -31, -31, -31, -31, -31, -30, -30, -30, -30, -30, -29, -29, -29, -28, -28, -27, -27, -27, -27, -26, -26, -25, -25, -24, -24, -24, -24, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -22, -21, -21, -20, -20, -20, -19, -18, -18, -17, -16, -16, -15, -14, -14, -14, -13, -12, -12, -11, -10, -9, -9, -8, -7, -7, -6, -5, -4, -4, -2, -1, 0, 1, 2, 4, 6, 7, 8, 9, 12, 13, 15, 16, 17, 17, 18, 18, 19, 20, 21, 21, 20, 20, 20, 21, 21, 21, 20, 20, 19, 18, 19, 17, 16, 16, 18, 20, 21, 22, 21, 20, 21, 22, 23, 23, 23, 24, 24, 24, 23, 22, 18, 13, 10, 13, 18, 20, 20, 21, 21, 21, 21, 20, 19, 18, 18, 18, 17, 17, 16, 16, 16, 16, 15, 15, 15, 16, 15, 15, 16, 16, 16, 16, 17, 17, 17, 18, 19, 20, 21, 22, 23, 23, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 28, 28, 29, 29, 29, 29, 29, 30, 31, 32, 32, 32, 33, 33, 34, 34, 34, 35, 34, 34, 34, 34, 33, 33, 33, 33, 33, 33, 33, 33, 32, 32, 33, 33, 33, 32, 32, 31, 31, 31, 31, 31, 31, 30, 29, 29, 28, 27, 27, 27, 28, 27, 26, 26, 25, 25, 24, 22, 21, 17, 14, 12, 11, 10, 9, 8, 7, 5, 4, 3, 2, 0, -1, -2, -3, -4, -5, -7, -7, -8, -9, -10, -11, -12, -14, -15, -16, -17, -18, -20, -21, -22, -23, -24, -25, -26, -26, -27, -28, -28, -29, -30, -30, -31, -31, -32, -32, -33, -33, -33, -33, -33, -33, -33, -33, -33, -32, -32, -31, -31, -31, -30, -30, -30, -30, -29, -29, -30, -31, -31, -31, -31, -31, -33, -35, -36, -37, -38, -39, -40, -41, -42, -43, -44, -44, -45, -46, -46, -46, -47, -47, -47, -47, -46, -46,
- /* -59.0 */ -45, -44, -44, -44, -44, -43, -43, -43, -42, -42, -41, -41, -41, -40, -39, -39, -38, -37, -37, -36, -35, -35, -34, -33, -33, -32, -32, -31, -31, -30, -30, -30, -30, -29, -29, -29, -29, -29, -28, -28, -28, -28, -27, -27, -27, -27, -27, -27, -26, -25, -25, -24, -24, -23, -23, -23, -23, -22, -22, -22, -21, -21, -21, -21, -21, -22, -22, -22, -22, -21, -20, -20, -19, -20, -19, -18, -17, -17, -16, -16, -16, -15, -14, -14, -13, -12, -12, -12, -11, -11, -10, -9, -9, -8, -7, -6, -6, -5, -4, -3, -2, -2, -1, 1, 2, 3, 4, 6, 7, 9, 11, 12, 13, 15, 16, 17, 17, 18, 19, 20, 19, 19, 20, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 20, 20, 19, 20, 20, 21, 20, 21, 21, 22, 22, 23, 23, 24, 24, 24, 23, 22, 20, 15, 9, 15, 18, 20, 21, 21, 21, 21, 21, 21, 21, 20, 20, 20, 20, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 17, 17, 17, 18, 18, 18, 19, 19, 20, 21, 22, 22, 23, 24, 24, 25, 25, 26, 26, 26, 27, 28, 28, 28, 29, 29, 30, 30, 30, 31, 32, 32, 33, 33, 34, 34, 35, 35, 36, 36, 36, 36, 36, 36, 36, 35, 35, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 33, 33, 33, 32, 31, 32, 32, 32, 32, 31, 30, 30, 29, 29, 30, 30, 30, 29, 29, 27, 26, 25, 24, 23, 19, 16, 14, 13, 12, 12, 10, 9, 8, 7, 6, 5, 3, 2, 0, -1, -2, -3, -4, -6, -7, -8, -8, -9, -11, -12, -13, -14, -15, -16, -18, -19, -20, -21, -22, -23, -24, -24, -25, -26, -27, -27, -28, -29, -29, -30, -30, -30, -30, -30, -31, -31, -31, -31, -31, -30, -30, -30, -30, -29, -29, -29, -28, -28, -28, -27, -27, -27, -27, -28, -29, -29, -29, -30, -34, -34, -33, -34, -36, -37, -38, -39, -40, -41, -41, -42, -43, -44, -44, -45, -45, -45, -45, -45, -45, -45, -45,
- /* -58.0 */ -43, -43, -43, -42, -42, -42, -41, -41, -41, -40, -40, -39, -38, -38, -37, -37, -36, -35, -34, -34, -33, -33, -32, -31, -31, -30, -30, -29, -29, -28, -28, -28, -27, -27, -27, -27, -27, -27, -26, -26, -26, -26, -26, -25, -25, -25, -24, -23, -23, -23, -22, -22, -21, -21, -21, -21, -21, -20, -20, -20, -20, -20, -19, -20, -20, -20, -19, -19, -19, -19, -19, -18, -18, -17, -17, -17, -16, -16, -15, -15, -14, -14, -13, -13, -12, -11, -11, -11, -10, -9, -8, -8, -8, -7, -6, -6, -5, -4, -3, -2, -1, -0, 1, 1, 3, 4, 5, 7, 8, 10, 11, 13, 13, 15, 15, 16, 16, 17, 18, 19, 20, 20, 20, 20, 20, 20, 20, 20, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 19, 19, 20, 20, 20, 20, 21, 21, 22, 22, 23, 24, 24, 24, 23, 22, 20, 15, 10, 15, 18, 20, 20, 20, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 20, 19, 19, 19, 19, 19, 19, 19, 19, 20, 21, 22, 23, 23, 24, 25, 26, 26, 27, 28, 27, 28, 28, 29, 29, 30, 31, 32, 32, 33, 33, 34, 34, 35, 35, 36, 37, 37, 37, 37, 37, 37, 38, 38, 37, 37, 37, 36, 36, 35, 35, 35, 35, 35, 35, 35, 34, 34, 34, 34, 34, 33, 32, 31, 32, 31, 31, 30, 30, 30, 30, 30, 30, 30, 29, 28, 28, 26, 25, 23, 21, 18, 16, 15, 15, 14, 13, 12, 10, 9, 8, 7, 6, 4, 3, 1, -0, -1, -2, -4, -5, -6, -7, -8, -9, -10, -11, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -24, -25, -26, -26, -27, -27, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -27, -27, -27, -26, -26, -26, -26, -26, -26, -26, -26, -27, -27, -28, -28, -32, -32, -28, -31, -32, -34, -35, -36, -37, -38, -39, -39, -41, -41, -42, -42, -42, -42, -42, -42, -43, -43, -43, -43,
- /* -57.0 */ -40, -40, -40, -40, -39, -39, -39, -39, -39, -38, -37, -37, -36, -36, -35, -35, -34, -33, -33, -32, -31, -31, -30, -30, -29, -28, -28, -27, -27, -27, -26, -26, -26, -25, -25, -25, -25, -25, -25, -24, -23, -23, -22, -22, -22, -22, -22, -21, -21, -21, -20, -20, -20, -20, -19, -19, -18, -18, -19, -19, -19, -18, -18, -17, -17, -17, -17, -17, -17, -16, -16, -16, -16, -16, -16, -15, -15, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -10, -9, -9, -9, -8, -7, -7, -6, -5, -4, -3, -2, -1, -0, 1, 2, 3, 4, 5, 6, 6, 7, 8, 8, 9, 12, 14, 13, 14, 15, 16, 17, 18, 19, 20, 20, 20, 20, 19, 18, 19, 19, 18, 18, 18, 19, 19, 18, 19, 18, 18, 18, 19, 19, 20, 20, 20, 21, 21, 21, 22, 23, 23, 23, 23, 22, 20, 16, 8, 9, 16, 19, 20, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 23, 23, 24, 24, 24, 25, 24, 23, 23, 23, 23, 22, 22, 22, 22, 21, 20, 20, 19, 20, 20, 20, 20, 21, 22, 23, 25, 25, 26, 27, 28, 28, 29, 29, 29, 29, 30, 30, 31, 32, 32, 33, 34, 34, 35, 36, 36, 37, 38, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 38, 38, 37, 37, 36, 36, 36, 36, 36, 36, 35, 35, 35, 35, 35, 35, 35, 35, 35, 34, 35, 34, 34, 34, 32, 31, 31, 30, 29, 29, 28, 26, 23, 20, 19, 18, 17, 16, 16, 15, 13, 12, 11, 10, 9, 8, 6, 5, 4, 2, 1, -1, -2, -3, -4, -5, -7, -8, -9, -10, -11, -12, -14, -15, -16, -17, -18, -19, -20, -21, -22, -22, -23, -24, -24, -25, -26, -26, -26, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -26, -25, -25, -25, -24, -24, -24, -24, -24, -24, -24, -25, -25, -25, -26, -26, -30, -30, -27, -30, -29, -31, -33, -34, -35, -36, -36, -37, -38, -38, -39, -39, -40, -40, -40, -40, -40, -40, -40, -40,
- /* -56.0 */ -37, -37, -38, -37, -37, -37, -37, -36, -36, -35, -35, -34, -34, -33, -33, -32, -32, -31, -30, -30, -30, -29, -28, -27, -27, -27, -26, -26, -25, -25, -24, -24, -24, -24, -23, -23, -23, -23, -22, -21, -21, -20, -20, -20, -20, -20, -20, -20, -20, -19, -19, -19, -18, -19, -18, -17, -17, -16, -15, -15, -14, -14, -14, -14, -14, -14, -14, -15, -14, -14, -14, -15, -14, -14, -14, -14, -14, -13, -12, -12, -12, -11, -11, -11, -11, -11, -11, -10, -9, -9, -8, -7, -7, -6, -5, -4, -3, -2, -2, -1, 1, 2, 3, 4, 5, 5, 5, 5, 4, 6, 11, 14, 15, 16, 14, 13, 14, 15, 16, 17, 18, 18, 19, 18, 17, 18, 18, 17, 17, 17, 18, 18, 18, 18, 17, 17, 17, 17, 17, 18, 18, 19, 19, 19, 19, 20, 21, 21, 21, 21, 21, 21, 21, 17, 5, 5, 15, 19, 20, 20, 21, 20, 20, 20, 21, 21, 22, 22, 22, 23, 23, 24, 24, 25, 26, 25, 25, 25, 25, 25, 24, 24, 24, 24, 24, 24, 23, 22, 22, 22, 22, 22, 22, 23, 24, 25, 26, 27, 28, 29, 29, 30, 31, 31, 31, 31, 32, 31, 32, 33, 34, 35, 35, 36, 37, 37, 38, 39, 40, 41, 41, 41, 42, 41, 41, 41, 41, 41, 41, 40, 40, 39, 39, 39, 38, 38, 37, 37, 37, 36, 36, 35, 35, 35, 35, 36, 36, 35, 34, 34, 33, 33, 33, 33, 32, 31, 31, 30, 29, 27, 24, 22, 20, 19, 19, 18, 17, 16, 15, 14, 13, 12, 10, 9, 8, 7, 5, 4, 3, 1, 0, -1, -2, -4, -5, -6, -7, -9, -10, -11, -12, -13, -15, -16, -17, -18, -19, -20, -21, -21, -22, -23, -23, -24, -25, -25, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -25, -25, -25, -24, -23, -23, -23, -22, -22, -22, -23, -23, -23, -23, -24, -24, -24, -24, -25, -25, -26, -27, -28, -28, -29, -31, -32, -32, -31, -32, -33, -34, -35, -36, -37, -37, -37, -37, -37, -37, -37, -37, -37,
- /* -55.0 */ -34, -35, -35, -35, -35, -34, -34, -34, -33, -33, -32, -32, -31, -31, -31, -30, -30, -30, -29, -28, -27, -27, -26, -26, -25, -25, -24, -24, -24, -23, -23, -23, -23, -23, -23, -22, -21, -21, -20, -20, -20, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -17, -16, -16, -15, -15, -14, -14, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -12, -12, -11, -11, -10, -10, -10, -10, -10, -10, -10, -8, -7, -6, -5, -5, -5, -4, -3, -3, -2, -1, 1, 2, 3, 4, 5, 5, 3, 3, 7, 10, 11, 13, 14, 14, 14, 14, 12, 11, 12, 13, 15, 17, 17, 18, 18, 17, 15, 14, 14, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 17, 16, 17, 19, 21, 23, 21, 17, 11, 12, 10, 8, 7, 4, 3, 8, 15, 18, 20, 21, 20, 20, 21, 21, 21, 22, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 27, 27, 27, 27, 26, 26, 26, 26, 26, 26, 26, 25, 25, 24, 24, 24, 25, 26, 27, 28, 29, 30, 31, 32, 32, 33, 33, 33, 34, 33, 33, 34, 34, 35, 35, 36, 37, 38, 39, 40, 41, 43, 44, 44, 45, 45, 44, 44, 44, 44, 44, 43, 42, 41, 41, 41, 41, 40, 39, 39, 38, 38, 37, 37, 36, 36, 35, 35, 35, 35, 34, 35, 35, 35, 35, 34, 34, 34, 33, 33, 32, 30, 28, 25, 23, 21, 20, 19, 19, 18, 17, 15, 14, 13, 12, 10, 9, 8, 7, 5, 4, 2, 2, 0, -1, -2, -3, -5, -6, -7, -9, -10, -11, -12, -13, -15, -16, -17, -18, -19, -20, -20, -21, -22, -22, -23, -24, -24, -25, -25, -25, -25, -25, -25, -25, -25, -24, -25, -24, -24, -24, -24, -23, -23, -22, -22, -21, -21, -21, -21, -21, -22, -22, -22, -22, -22, -22, -22, -23, -23, -23, -22, -23, -26, -26, -27, -27, -28, -27, -26, -25, -26, -28, -30, -32, -33, -34, -34, -33, -33, -33, -34, -34, -34,
- /* -54.0 */ -31, -32, -32, -31, -31, -31, -31, -31, -31, -30, -30, -29, -29, -29, -28, -28, -28, -27, -27, -26, -26, -25, -25, -24, -24, -23, -23, -23, -23, -23, -23, -22, -21, -21, -21, -20, -20, -20, -19, -19, -18, -18, -18, -18, -17, -17, -18, -19, -19, -18, -18, -17, -16, -15, -15, -14, -14, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -12, -12, -12, -12, -12, -11, -10, -10, -9, -9, -9, -9, -9, -8, -7, -6, -6, -5, -5, -4, -4, -3, -2, -1, 0, 2, 3, 4, 5, 5, 4, 4, 9, 12, 10, 9, 10, 12, 12, 12, 12, 11, 10, 9, 10, 11, 10, 10, 10, 9, 7, 7, 9, 12, 13, 12, 11, 11, 12, 14, 14, 14, 13, 14, 16, 16, 15, 17, 18, 18, 17, 12, 12, 13, 13, 13, 14, 14, 13, 14, 15, 17, 19, 21, 21, 21, 21, 21, 22, 22, 22, 23, 23, 23, 24, 25, 25, 25, 26, 26, 27, 27, 27, 28, 28, 28, 27, 27, 27, 27, 28, 28, 27, 27, 26, 26, 27, 27, 28, 28, 28, 29, 29, 31, 31, 32, 33, 34, 35, 36, 36, 36, 37, 34, 35, 36, 36, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 47, 47, 47, 46, 45, 45, 44, 45, 43, 43, 44, 45, 43, 41, 41, 40, 39, 38, 38, 38, 37, 36, 36, 35, 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 34, 33, 31, 27, 24, 23, 24, 22, 20, 20, 18, 17, 16, 14, 13, 12, 11, 9, 8, 7, 6, 4, 3, 1, 0, -1, -2, -4, -5, -6, -7, -9, -10, -11, -12, -14, -15, -16, -17, -18, -19, -20, -20, -21, -22, -22, -23, -23, -24, -24, -25, -24, -24, -24, -24, -24, -24, -23, -23, -23, -23, -23, -22, -22, -22, -21, -20, -20, -20, -20, -19, -21, -21, -21, -21, -21, -21, -21, -21, -22, -22, -22, -22, -19, -23, -22, -23, -23, -24, -22, -22, -22, -22, -23, -24, -24, -26, -28, -29, -30, -30, -31, -31, -31, -31,
- /* -53.0 */ -28, -28, -29, -28, -29, -29, -28, -28, -28, -28, -27, -27, -26, -26, -26, -26, -25, -25, -25, -24, -24, -23, -23, -22, -22, -23, -23, -22, -21, -21, -21, -20, -20, -20, -20, -19, -19, -19, -18, -18, -18, -18, -18, -19, -20, -20, -20, -19, -18, -17, -17, -16, -16, -15, -14, -14, -13, -13, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -10, -10, -9, -9, -8, -8, -8, -8, -8, -7, -6, -6, -5, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 5, 5, 9, 11, 10, 10, 9, 9, 11, 12, 12, 12, 13, 13, 12, 12, 11, 11, 11, 10, 10, 8, 6, 5, 5, 6, 7, 6, 4, 6, 8, 6, 4, 4, 6, 6, 4, 3, 3, 5, 10, 11, 12, 13, 15, 15, 16, 16, 16, 16, 16, 16, 17, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 27, 28, 28, 28, 28, 27, 27, 27, 27, 27, 27, 26, 26, 26, 27, 27, 27, 28, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36, 36, 37, 38, 38, 38, 37, 36, 37, 37, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 48, 48, 51, 50, 47, 46, 47, 45, 44, 45, 43, 43, 42, 41, 41, 41, 39, 38, 37, 37, 36, 35, 35, 35, 35, 35, 35, 34, 34, 35, 37, 40, 39, 37, 35, 34, 32, 30, 28, 26, 24, 23, 22, 20, 19, 17, 16, 15, 13, 12, 11, 9, 8, 7, 5, 4, 3, 1, -0, -1, -3, -4, -5, -6, -8, -9, -10, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -21, -21, -22, -23, -23, -24, -24, -24, -24, -24, -23, -23, -23, -23, -23, -22, -22, -22, -22, -21, -21, -20, -20, -19, -19, -19, -19, -19, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -17, -19, -19, -20, -21, -20, -19, -19, -19, -18, -18, -19, -20, -21, -23, -26, -27, -27, -28, -28, -28,
- /* -52.0 */ -25, -25, -25, -26, -26, -26, -26, -25, -25, -24, -24, -24, -24, -24, -23, -23, -23, -23, -22, -22, -21, -21, -21, -22, -22, -21, -20, -20, -20, -20, -19, -19, -19, -19, -19, -18, -18, -18, -18, -18, -18, -19, -20, -19, -19, -19, -19, -18, -18, -17, -17, -16, -15, -15, -14, -13, -13, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -12, -12, -12, -12, -11, -11, -11, -11, -11, -10, -10, -10, -9, -9, -8, -8, -8, -7, -7, -7, -6, -5, -5, -4, -3, -2, -1, -0, 1, 2, 3, 4, 5, 5, 5, 7, 13, 13, 13, 11, 10, 9, 10, 10, 10, 11, 12, 13, 14, 14, 14, 12, 12, 12, 12, 11, 10, 9, 8, 7, 6, 6, 6, 5, 4, 4, 5, 5, 5, 5, 5, 6, 7, 8, 10, 11, 10, 13, 15, 15, 15, 16, 15, 15, 15, 18, 17, 18, 19, 19, 20, 20, 21, 22, 22, 23, 24, 24, 25, 25, 26, 26, 27, 27, 27, 28, 28, 28, 27, 27, 27, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 29, 30, 31, 31, 33, 33, 34, 35, 35, 36, 36, 36, 36, 37, 37, 37, 38, 37, 36, 39, 39, 38, 39, 40, 41, 43, 44, 45, 46, 47, 49, 49, 47, 47, 47, 47, 47, 46, 45, 44, 44, 43, 43, 43, 42, 42, 41, 40, 39, 38, 37, 37, 36, 36, 36, 35, 35, 35, 34, 35, 37, 38, 38, 38, 37, 36, 33, 30, 29, 28, 27, 25, 23, 22, 21, 19, 18, 16, 15, 14, 12, 11, 9, 8, 6, 5, 4, 2, 1, -1, -2, -3, -5, -6, -7, -8, -10, -11, -12, -13, -14, -16, -17, -18, -19, -19, -20, -21, -21, -22, -22, -23, -23, -24, -24, -24, -23, -23, -23, -22, -22, -22, -22, -21, -21, -21, -20, -20, -20, -19, -19, -19, -18, -18, -18, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -18, -18, -18, -15, -16, -17, -17, -18, -18, -15, -16, -16, -15, -16, -16, -17, -17, -19, -21, -23, -24, -24, -24, -25,
- /* -51.0 */ -21, -21, -21, -21, -22, -23, -23, -22, -22, -21, -21, -21, -21, -21, -21, -21, -21, -21, -20, -20, -20, -20, -21, -20, -20, -20, -19, -19, -19, -18, -18, -18, -17, -17, -17, -18, -18, -17, -17, -18, -19, -18, -18, -18, -18, -18, -18, -18, -18, -17, -16, -15, -15, -14, -13, -13, -12, -12, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -9, -8, -8, -8, -7, -7, -7, -6, -6, -5, -4, -4, -3, -2, -1, -0, 1, 2, 2, 3, 5, 5, 5, 5, 9, 14, 15, 15, 13, 11, 10, 10, 10, 10, 11, 12, 13, 13, 12, 12, 13, 13, 13, 12, 11, 10, 10, 9, 7, 6, 6, 6, 6, 5, 6, 6, 8, 9, 8, 7, 6, 6, 7, 7, 8, 8, 10, 10, 11, 12, 12, 13, 13, 15, 16, 17, 17, 18, 19, 20, 20, 21, 22, 23, 23, 24, 25, 25, 26, 26, 26, 27, 27, 28, 28, 27, 27, 27, 27, 27, 26, 26, 25, 25, 25, 25, 25, 25, 26, 26, 27, 27, 27, 29, 31, 31, 32, 32, 33, 34, 34, 34, 35, 35, 36, 36, 37, 37, 38, 36, 38, 40, 40, 39, 40, 41, 42, 43, 44, 46, 46, 46, 47, 46, 47, 46, 46, 46, 45, 45, 44, 44, 44, 44, 43, 43, 41, 41, 40, 39, 38, 38, 37, 37, 36, 36, 37, 37, 36, 35, 38, 39, 38, 38, 37, 36, 33, 31, 30, 29, 28, 27, 25, 24, 22, 20, 19, 18, 16, 15, 13, 12, 11, 9, 8, 6, 5, 3, 2, 0, -1, -3, -4, -5, -7, -8, -9, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -21, -21, -22, -23, -23, -23, -24, -24, -24, -23, -23, -23, -22, -22, -21, -21, -21, -20, -20, -20, -19, -19, -19, -19, -18, -18, -18, -17, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -17, -16, -15, -14, -12, -12, -14, -14, -11, -12, -12, -12, -13, -13, -14, -14, -15, -16, -18, -20, -20, -21, -21,
- /* -50.0 */ -17, -17, -17, -15, -17, -19, -20, -19, -19, -19, -19, -19, -19, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -17, -17, -16, -16, -16, -16, -16, -17, -17, -16, -17, -18, -18, -18, -17, -17, -17, -18, -18, -18, -18, -17, -17, -17, -16, -15, -14, -14, -13, -12, -12, -12, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -10, -10, -10, -10, -9, -9, -9, -8, -8, -7, -7, -7, -6, -6, -5, -4, -3, -3, -2, -1, -0, 0, 1, 2, 3, 4, 5, 6, 5, 6, 10, 13, 16, 16, 14, 13, 11, 10, 10, 11, 11, 11, 12, 13, 13, 13, 12, 12, 11, 11, 9, 8, 6, 4, 3, 3, 2, 2, 2, 2, 2, 3, 5, 6, 6, 6, 3, 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11, 12, 14, 15, 16, 17, 18, 19, 20, 20, 21, 22, 23, 23, 25, 25, 26, 26, 27, 27, 27, 27, 27, 27, 27, 26, 26, 26, 25, 25, 25, 25, 24, 25, 25, 24, 25, 24, 25, 25, 26, 26, 27, 28, 30, 31, 31, 32, 33, 33, 34, 34, 35, 35, 35, 36, 37, 37, 38, 38, 40, 40, 40, 41, 41, 42, 43, 43, 44, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 44, 44, 44, 43, 43, 42, 41, 40, 39, 38, 37, 37, 36, 39, 40, 39, 37, 39, 41, 40, 37, 37, 36, 35, 33, 32, 31, 30, 29, 27, 26, 24, 23, 22, 20, 19, 17, 16, 14, 13, 11, 10, 9, 7, 6, 4, 2, 1, -1, -2, -4, -5, -6, -8, -9, -10, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -21, -22, -22, -23, -23, -23, -24, -24, -24, -24, -23, -23, -23, -22, -22, -22, -21, -20, -20, -19, -19, -18, -18, -19, -18, -18, -17, -17, -17, -18, -18, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -16, -15, -14, -13, -13, -11, -10, -12, -10, -9, -10, -10, -10, -10, -10, -10, -11, -12, -13, -13, -14, -15, -17,
- /* -49.0 */ -10, -12, -14, -15, -16, -16, -16, -16, -17, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -17, -16, -16, -15, -15, -15, -15, -15, -15, -16, -16, -15, -16, -16, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -16, -16, -15, -15, -14, -13, -13, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10, -9, -9, -10, -10, -10, -10, -10, -10, -10, -10, -10, -9, -9, -9, -8, -7, -7, -7, -7, -6, -6, -5, -4, -3, -3, -2, -1, -1, 0, 1, 2, 3, 3, 4, 5, 6, 6, 6, 10, 15, 16, 17, 16, 15, 13, 12, 12, 11, 11, 11, 11, 12, 11, 11, 11, 10, 10, 9, 7, 6, 3, 1, -0, -1, -1, -1, -1, -1, -1, 0, 1, 1, 2, 2, 1, 1, 2, 3, 3, 4, 4, 6, 6, 7, 8, 9, 12, 13, 14, 15, 16, 17, 19, 20, 21, 21, 23, 23, 24, 25, 26, 27, 27, 27, 28, 27, 27, 26, 26, 25, 25, 25, 24, 24, 24, 24, 23, 24, 24, 25, 24, 24, 25, 23, 25, 26, 27, 28, 28, 29, 30, 30, 31, 32, 33, 33, 33, 34, 34, 34, 35, 35, 37, 38, 39, 40, 42, 42, 42, 42, 43, 43, 42, 43, 44, 44, 45, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 44, 44, 43, 42, 41, 41, 40, 39, 38, 38, 38, 37, 37, 38, 39, 41, 41, 40, 38, 36, 34, 33, 32, 31, 30, 29, 28, 26, 25, 24, 22, 21, 20, 18, 17, 15, 14, 12, 11, 9, 8, 6, 5, 3, 2, 0, -2, -3, -5, -6, -8, -9, -10, -12, -13, -14, -15, -17, -18, -19, -19, -20, -21, -22, -22, -23, -23, -23, -24, -24, -24, -24, -24, -24, -24, -23, -23, -22, -22, -21, -21, -20, -20, -19, -18, -18, -17, -18, -18, -17, -17, -17, -17, -17, -17, -16, -16, -14, -15, -16, -16, -16, -16, -16, -15, -15, -14, -12, -12, -11, -10, -11, -8, -9, -6, -7, -8, -8, -8, -7, -7, -7, -7, -8, -9, -9, -9, -10,
- /* -48.0 */ -5, -8, -11, -12, -13, -13, -13, -13, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -14, -13, -14, -14, -14, -14, -14, -15, -15, -16, -16, -16, -16, -17, -17, -17, -17, -17, -17, -17, -16, -16, -15, -15, -15, -14, -14, -13, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10, -10, -9, -9, -10, -10, -10, -10, -10, -10, -10, -9, -9, -9, -9, -8, -8, -7, -7, -7, -6, -6, -5, -4, -3, -2, -2, -1, -1, -0, 1, 2, 2, 3, 4, 5, 6, 7, 7, 7, 11, 15, 16, 17, 18, 16, 15, 14, 12, 11, 11, 11, 11, 11, 11, 11, 10, 8, 7, 5, 4, 2, 1, -0, -1, -2, -2, -2, -3, -3, -3, -2, -1, -1, -1, -1, -0, -0, 0, 1, 2, 2, 3, 4, 6, 7, 8, 10, 11, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 26, 27, 28, 28, 28, 27, 27, 26, 25, 25, 24, 24, 24, 24, 23, 23, 23, 22, 23, 23, 24, 24, 26, 25, 26, 26, 26, 27, 28, 29, 30, 30, 31, 32, 32, 32, 32, 33, 33, 33, 34, 34, 35, 37, 39, 40, 41, 44, 44, 44, 43, 43, 43, 43, 44, 44, 44, 43, 44, 44, 45, 45, 45, 45, 45, 45, 45, 44, 44, 43, 43, 42, 41, 40, 38, 38, 37, 36, 36, 36, 39, 39, 40, 40, 39, 37, 35, 33, 32, 31, 30, 29, 28, 27, 25, 24, 23, 22, 20, 19, 17, 16, 15, 13, 11, 10, 8, 7, 5, 4, 2, 1, -1, -3, -4, -6, -7, -9, -10, -12, -13, -14, -16, -17, -18, -19, -20, -21, -22, -22, -23, -24, -24, -24, -24, -25, -25, -25, -25, -25, -24, -24, -24, -23, -23, -22, -22, -21, -20, -20, -19, -18, -18, -17, -18, -17, -17, -17, -16, -16, -16, -15, -14, -14, -14, -15, -15, -15, -15, -15, -15, -14, -14, -13, -11, -10, -9, -8, -11, -10, -6, -3, -4, -5, -5, -6, -5, -5, -5, -5, -6, -5, -5, -4, -5,
- /* -47.0 */ -5, -7, -8, -8, -9, -9, -10, -10, -10, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -14, -14, -14, -14, -15, -15, -15, -16, -16, -17, -17, -17, -16, -16, -16, -16, -16, -15, -15, -14, -14, -14, -13, -13, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10, -9, -9, -9, -10, -10, -10, -10, -9, -9, -9, -9, -9, -8, -7, -7, -7, -6, -6, -6, -5, -5, -4, -3, -2, -1, -0, 0, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 13, 18, 20, 20, 17, 16, 14, 13, 12, 12, 12, 11, 12, 11, 11, 9, 7, 6, 4, 2, 0, -1, -1, -2, -3, -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -2, -2, -2, -1, 0, 2, 3, 4, 6, 7, 9, 11, 12, 14, 15, 16, 17, 19, 20, 21, 23, 23, 25, 26, 26, 27, 28, 27, 27, 27, 27, 27, 25, 25, 24, 24, 24, 23, 23, 23, 22, 22, 22, 22, 23, 24, 25, 26, 25, 26, 26, 26, 27, 27, 28, 29, 30, 31, 31, 32, 32, 33, 33, 33, 33, 33, 34, 34, 35, 37, 40, 41, 43, 45, 45, 45, 44, 46, 43, 45, 44, 43, 43, 44, 45, 46, 46, 45, 45, 46, 48, 48, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 34, 36, 38, 37, 36, 36, 35, 33, 32, 31, 30, 29, 28, 26, 25, 24, 23, 22, 20, 19, 18, 16, 15, 13, 12, 10, 9, 7, 6, 4, 2, 1, -1, -2, -4, -6, -7, -9, -10, -12, -13, -15, -16, -17, -19, -20, -21, -21, -22, -23, -24, -25, -25, -25, -25, -25, -26, -26, -26, -25, -25, -25, -25, -24, -24, -23, -23, -22, -21, -20, -20, -19, -18, -17, -17, -18, -17, -17, -17, -16, -16, -15, -13, -12, -13, -14, -14, -14, -14, -13, -13, -13, -12, -12, -11, -11, -9, -7, -7, -7, -8, -4, -2, 1, 1, -1, -2, -2, -2, -2, -3, -3, -3, -3, -4, -5,
- /* -46.0 */ -2, -3, -4, -4, -4, -5, -5, -6, -7, -8, -9, -9, -10, -10, -10, -10, -11, -10, -10, -10, -10, -10, -10, -10, -9, -10, -10, -11, -11, -12, -12, -13, -13, -14, -14, -14, -15, -15, -15, -16, -16, -16, -16, -16, -16, -16, -15, -15, -15, -15, -14, -14, -13, -13, -13, -12, -12, -11, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -9, -9, -9, -9, -9, -8, -8, -7, -6, -6, -6, -5, -5, -4, -4, -3, -3, -2, -1, -0, 0, 1, 2, 2, 4, 5, 5, 7, 8, 9, 10, 11, 11, 15, 18, 23, 23, 19, 16, 15, 14, 13, 12, 12, 12, 12, 11, 10, 9, 5, 4, 2, 0, -0, -1, -2, -3, -3, -4, -4, -4, -4, -4, -3, -4, -4, -5, -5, -4, -4, -3, -3, -2, -1, 0, 2, 3, 5, 7, 9, 10, 12, 13, 15, 16, 17, 19, 20, 22, 23, 24, 25, 26, 27, 27, 27, 26, 27, 26, 25, 25, 25, 24, 23, 23, 23, 23, 23, 22, 22, 21, 21, 22, 22, 23, 24, 24, 25, 25, 26, 27, 27, 27, 28, 29, 30, 31, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, 35, 38, 40, 42, 45, 45, 46, 46, 46, 45, 46, 45, 46, 46, 44, 46, 47, 47, 45, 47, 52, 50, 47, 44, 43, 43, 42, 41, 40, 38, 37, 35, 34, 34, 33, 33, 33, 34, 34, 33, 33, 32, 31, 30, 29, 29, 28, 27, 25, 24, 23, 22, 20, 19, 18, 17, 15, 14, 12, 11, 9, 7, 6, 4, 2, 1, -1, -3, -4, -6, -7, -9, -11, -12, -14, -15, -16, -18, -19, -21, -21, -22, -23, -24, -25, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -25, -25, -24, -24, -23, -22, -22, -21, -20, -19, -18, -18, -17, -18, -17, -16, -16, -16, -15, -14, -14, -14, -14, -14, -13, -13, -12, -12, -11, -11, -10, -10, -9, -8, -8, -7, -5, -5, -5, -2, 4, 4, 5, 6, 3, 1, 1, 1, 1, 1, 0, -0, -1, -2,
- /* -45.0 */ 3, 3, 3, 3, 1, -0, -1, -3, -4, -5, -6, -7, -8, -8, -8, -9, -8, -8, -8, -8, -8, -8, -7, -8, -8, -8, -9, -10, -10, -11, -12, -12, -12, -13, -13, -13, -14, -14, -15, -15, -15, -15, -15, -16, -16, -15, -15, -15, -15, -14, -14, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -9, -9, -9, -9, -8, -8, -7, -7, -7, -6, -6, -5, -4, -4, -3, -3, -2, -2, -1, -0, 0, 1, 2, 3, 4, 5, 6, 6, 7, 9, 10, 11, 11, 13, 16, 19, 19, 18, 17, 16, 15, 14, 12, 12, 12, 11, 11, 11, 9, 5, 3, 2, 0, 0, -0, -1, -2, -3, -3, -3, -4, -4, -4, -3, -4, -4, -5, -5, -5, -4, -4, -3, -3, -2, -0, 1, 3, 5, 7, 9, 10, 12, 13, 15, 17, 18, 19, 21, 22, 23, 24, 25, 26, 26, 26, 26, 26, 26, 26, 25, 25, 25, 25, 24, 24, 23, 22, 21, 21, 21, 21, 22, 22, 22, 23, 24, 25, 26, 26, 26, 27, 27, 28, 28, 29, 30, 31, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33, 33, 34, 35, 38, 39, 42, 44, 46, 46, 47, 46, 46, 46, 46, 45, 45, 46, 46, 46, 45, 44, 45, 45, 44, 43, 43, 42, 41, 40, 39, 37, 36, 34, 33, 32, 32, 32, 31, 31, 31, 31, 31, 30, 30, 29, 28, 27, 26, 25, 24, 23, 21, 20, 19, 18, 16, 15, 14, 12, 11, 9, 8, 6, 4, 3, 1, -1, -3, -5, -6, -8, -9, -11, -13, -14, -16, -17, -19, -20, -21, -22, -23, -24, -25, -26, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -26, -26, -26, -25, -24, -24, -23, -22, -21, -20, -19, -19, -18, -17, -17, -17, -16, -16, -15, -15, -14, -13, -13, -12, -12, -12, -11, -11, -10, -9, -9, -8, -8, -8, -7, -6, -4, -3, -3, -3, -6, -1, 4, 5, 8, 7, 6, 5, 5, 6, 5, 5, 5, 4, 3,
- /* -44.0 */ 10, 10, 9, 10, 9, 6, 3, 1, -0, -2, -4, -4, -5, -5, -6, -6, -6, -5, -6, -4, -6, -7, -7, -7, -7, -7, -8, -9, -9, -10, -10, -11, -11, -12, -12, -12, -13, -14, -14, -14, -15, -15, -15, -15, -14, -15, -14, -14, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10, -9, -9, -9, -9, -8, -8, -7, -7, -6, -6, -5, -5, -4, -4, -4, -3, -2, -2, -1, -0, 1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 10, 12, 14, 17, 18, 18, 19, 18, 16, 15, 14, 12, 11, 11, 11, 11, 10, 6, 6, 2, 1, 1, -0, -1, -2, -2, -2, -3, -3, -3, -3, -4, -5, -5, -6, -6, -6, -6, -5, -4, -3, -2, -0, 1, 3, 5, 7, 8, 10, 12, 13, 15, 16, 18, 19, 21, 22, 23, 24, 25, 26, 25, 26, 26, 26, 25, 25, 25, 24, 24, 23, 23, 22, 22, 23, 22, 21, 21, 21, 21, 21, 22, 23, 24, 24, 25, 26, 27, 27, 28, 28, 28, 29, 30, 30, 31, 32, 32, 33, 33, 33, 34, 34, 33, 33, 33, 34, 34, 35, 38, 40, 42, 44, 45, 46, 46, 46, 46, 44, 44, 44, 45, 44, 44, 44, 44, 44, 43, 43, 43, 42, 41, 39, 39, 37, 36, 34, 33, 32, 32, 31, 31, 30, 30, 30, 30, 29, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 16, 15, 13, 12, 11, 9, 8, 6, 4, 3, 1, -1, -3, -5, -6, -8, -10, -12, -13, -14, -16, -18, -19, -21, -22, -23, -24, -25, -26, -27, -28, -28, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -27, -27, -27, -26, -26, -25, -24, -23, -23, -22, -21, -20, -19, -18, -17, -17, -16, -16, -15, -15, -13, -10, -8, -9, -11, -9, -9, -9, -9, -8, -7, -7, -6, -6, -6, -5, -4, -3, -1, -1, 0, 1, -0, 2, 5, 8, 9, 9, 11, 10, 11, 12, 11, 11, 10, 10,
- /* -43.0 */ 14, 13, 12, 12, 10, 9, 7, 4, 3, 2, 0, -1, -2, -2, -3, -3, -3, -3, -3, -4, -4, -4, -5, -5, -6, -6, -7, -7, -8, -9, -9, -10, -11, -11, -12, -12, -13, -13, -13, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -11, -10, -10, -10, -10, -10, -9, -9, -9, -9, -8, -8, -8, -8, -7, -6, -5, -5, -5, -4, -4, -3, -2, -2, -1, -0, 1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 10, 12, 15, 17, 20, 20, 20, 20, 19, 16, 14, 13, 13, 12, 11, 12, 11, 9, 6, 4, 1, 1, 0, -1, -2, -2, -2, -3, -3, -3, -4, -4, -5, -6, -7, -7, -7, -6, -6, -5, -3, -2, -1, 1, 3, 5, 7, 8, 10, 11, 13, 14, 16, 18, 19, 20, 22, 23, 24, 25, 25, 25, 25, 25, 25, 24, 24, 24, 23, 23, 23, 22, 21, 22, 21, 19, 19, 20, 21, 21, 21, 22, 23, 24, 25, 25, 26, 28, 28, 28, 28, 28, 29, 29, 30, 30, 31, 32, 33, 33, 33, 34, 34, 33, 34, 34, 33, 33, 34, 35, 37, 40, 41, 43, 43, 44, 45, 45, 44, 43, 44, 44, 43, 43, 44, 44, 43, 43, 42, 42, 41, 39, 38, 37, 36, 35, 33, 32, 32, 31, 30, 30, 30, 29, 29, 28, 27, 27, 26, 25, 24, 24, 23, 22, 21, 20, 19, 18, 16, 15, 13, 12, 11, 9, 8, 6, 4, 3, 1, -1, -3, -5, -7, -8, -11, -12, -14, -16, -17, -18, -20, -21, -23, -24, -25, -26, -27, -28, -29, -29, -30, -30, -30, -30, -30, -30, -30, -30, -30, -29, -29, -28, -28, -27, -27, -26, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -16, -15, -15, -14, -9, -5, -4, -5, -8, -9, -8, -8, -7, -6, -5, -5, -4, -4, -3, -3, -2, -0, 1, 2, 3, 4, 5, 7, 8, 9, 11, 13, 12, 10, 12, 14, 14, 15, 14, 14,
- /* -42.0 */ 15, 15, 14, 13, 11, 10, 9, 7, 5, 4, 3, 2, 1, 0, 0, -1, 0, -0, -2, -2, -2, -3, -4, -4, -4, -5, -5, -6, -7, -7, -8, -9, -10, -11, -11, -12, -12, -12, -12, -13, -13, -13, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10, -9, -9, -9, -9, -8, -8, -8, -7, -7, -6, -5, -5, -4, -4, -3, -2, -2, -1, -0, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11, 12, 16, 17, 20, 21, 22, 23, 23, 19, 16, 14, 13, 13, 12, 12, 12, 12, 10, 6, 2, 1, 0, -1, -1, -2, -3, -3, -3, -4, -4, -5, -6, -7, -8, -8, -7, -6, -5, -4, -3, -2, -1, 1, 3, 5, 6, 8, 10, 11, 13, 14, 16, 18, 19, 20, 22, 23, 24, 25, 25, 25, 25, 25, 24, 24, 24, 24, 23, 23, 22, 22, 21, 20, 20, 20, 24, 21, 22, 20, 20, 21, 22, 23, 24, 25, 26, 26, 27, 28, 28, 29, 29, 29, 29, 30, 30, 31, 31, 32, 34, 35, 35, 35, 34, 34, 33, 33, 33, 34, 35, 37, 38, 40, 41, 42, 43, 44, 44, 43, 44, 44, 43, 43, 43, 43, 42, 42, 40, 40, 39, 37, 36, 35, 35, 33, 32, 31, 30, 30, 29, 28, 28, 28, 28, 27, 26, 25, 24, 23, 22, 22, 21, 20, 19, 18, 17, 16, 15, 13, 12, 10, 9, 7, 6, 4, 2, 1, -1, -3, -5, -7, -9, -11, -13, -14, -16, -18, -19, -21, -22, -24, -25, -26, -27, -28, -29, -30, -31, -31, -31, -32, -32, -31, -31, -31, -31, -31, -31, -30, -30, -29, -29, -28, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -15, -14, -12, -6, -2, -1, -2, -5, -7, -7, -6, -5, -4, -3, -2, -2, -1, -1, -0, 1, 2, 3, 4, 6, 7, 9, 11, 12, 13, 14, 15, 15, 11, 9, 10, 11, 14, 16, 15,
- /* -41.0 */ 19, 18, 17, 15, 13, 12, 10, 7, 6, 5, 4, 4, 3, 2, 2, 4, 2, 0, 0, -1, -1, -1, -1, -1, -2, -3, -4, -4, -5, -6, -7, -8, -10, -10, -11, -11, -11, -11, -12, -12, -12, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -12, -12, -12, -12, -12, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10, -9, -9, -8, -8, -8, -8, -7, -7, -5, -4, -4, -3, -3, -2, -2, -1, -1, -0, -0, 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 11, 11, 16, 19, 21, 22, 23, 24, 23, 20, 16, 14, 14, 13, 13, 13, 13, 12, 11, 9, 5, 2, 1, -0, -1, -2, -3, -3, -4, -5, -5, -6, -7, -8, -8, -8, -7, -6, -5, -4, -3, -2, -1, 0, 2, 4, 6, 8, 10, 11, 13, 14, 16, 18, 19, 20, 21, 22, 23, 24, 25, 24, 24, 24, 24, 24, 23, 23, 23, 22, 22, 20, 20, 20, 19, 18, 17, 18, 18, 19, 19, 20, 21, 22, 23, 25, 26, 27, 27, 27, 29, 29, 29, 29, 29, 29, 30, 30, 30, 31, 33, 35, 36, 35, 35, 33, 33, 33, 33, 33, 33, 35, 36, 37, 38, 39, 40, 42, 43, 43, 43, 44, 43, 43, 42, 42, 41, 41, 40, 39, 37, 36, 35, 34, 32, 31, 30, 29, 29, 28, 28, 27, 27, 27, 26, 26, 25, 24, 22, 21, 20, 19, 19, 18, 18, 16, 15, 14, 13, 11, 10, 8, 7, 5, 4, 2, 0, -2, -4, -5, -7, -9, -11, -13, -15, -17, -19, -20, -22, -23, -24, -26, -27, -28, -29, -30, -31, -32, -32, -33, -33, -33, -33, -33, -33, -33, -32, -32, -32, -32, -31, -30, -30, -29, -28, -28, -27, -26, -25, -23, -22, -21, -20, -18, -17, -16, -16, -15, -14, -12, -6, -2, -1, -1, -0, -3, -5, -4, -3, -2, -1, -1, 0, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13, 14, 15, 16, 16, 18, 16, 13, 13, 17, 16, 15, 17, 19,
- /* -40.0 */ 21, 20, 19, 17, 15, 13, 11, 9, 8, 7, 6, 6, 5, 5, 6, 3, 3, 3, 2, 1, 1, 1, 0, -0, -1, -2, -2, -3, -4, -6, -7, -8, -9, -10, -10, -10, -10, -11, -11, -12, -12, -12, -12, -12, -13, -13, -13, -13, -13, -13, -13, -13, -12, -12, -12, -12, -12, -12, -13, -13, -13, -13, -13, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10, -9, -9, -8, -8, -8, -7, -7, -6, -6, -5, -4, -3, -3, -2, -2, -1, -1, -1, -0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9, 11, 11, 10, 13, 17, 22, 23, 23, 23, 21, 19, 16, 15, 14, 13, 13, 14, 14, 13, 13, 12, 10, 5, 2, 0, -0, -2, -3, -4, -4, -5, -6, -6, -7, -7, -8, -7, -7, -6, -5, -4, -3, -2, -1, 0, 2, 4, 6, 8, 10, 11, 13, 14, 16, 17, 19, 20, 21, 22, 23, 23, 24, 24, 24, 23, 23, 23, 23, 22, 22, 22, 22, 20, 19, 18, 18, 18, 17, 18, 18, 19, 19, 20, 20, 21, 22, 24, 25, 26, 26, 27, 26, 28, 28, 29, 29, 29, 29, 29, 30, 30, 32, 34, 35, 35, 34, 33, 33, 33, 34, 34, 33, 33, 34, 34, 35, 37, 38, 40, 41, 42, 43, 43, 43, 42, 42, 41, 40, 40, 39, 38, 36, 35, 33, 32, 31, 30, 29, 28, 27, 27, 27, 26, 26, 26, 25, 24, 23, 22, 21, 20, 18, 18, 17, 17, 16, 15, 13, 12, 10, 9, 7, 6, 4, 2, 1, -1, -2, -4, -6, -8, -10, -12, -14, -16, -18, -19, -21, -23, -24, -25, -27, -28, -29, -30, -31, -32, -33, -33, -34, -34, -34, -34, -34, -34, -34, -34, -34, -33, -33, -32, -32, -31, -30, -30, -29, -28, -27, -26, -25, -24, -23, -21, -20, -18, -17, -15, -15, -14, -12, -7, -2, -2, -1, -0, 1, 0, -2, -2, -1, 1, 1, 2, 3, 3, 4, 4, 5, 6, 7, 8, 10, 12, 12, 15, 18, 19, 19, 19, 20, 19, 15, 13, 16, 18, 19, 19, 21,
- /* -39.0 */ 22, 22, 21, 19, 17, 16, 13, 12, 11, 10, 9, 8, 10, 8, 6, 6, 5, 4, 3, 3, 3, 2, 1, 1, 0, -1, -2, -3, -4, -6, -7, -8, -8, -9, -9, -9, -10, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -13, -13, -13, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10, -10, -9, -8, -8, -8, -7, -7, -6, -6, -5, -4, -3, -3, -2, -2, -2, -1, -1, -1, -0, 1, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 9, 13, 17, 20, 24, 23, 20, 18, 17, 16, 14, 14, 14, 14, 13, 12, 13, 13, 13, 11, 8, 3, 1, -0, -2, -3, -4, -4, -5, -5, -6, -7, -7, -7, -7, -7, -6, -6, -5, -4, -3, -1, 1, 2, 4, 6, 8, 10, 11, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 23, 23, 23, 23, 23, 22, 22, 22, 22, 20, 20, 19, 19, 18, 17, 17, 17, 17, 18, 19, 19, 20, 20, 21, 22, 23, 24, 25, 26, 26, 28, 27, 28, 27, 28, 29, 29, 29, 30, 30, 30, 32, 34, 33, 32, 33, 32, 32, 32, 32, 32, 32, 32, 32, 33, 34, 36, 37, 39, 40, 40, 41, 41, 43, 42, 41, 40, 40, 38, 37, 35, 33, 31, 30, 29, 28, 27, 26, 26, 26, 26, 25, 25, 25, 24, 23, 22, 20, 19, 18, 17, 16, 16, 15, 15, 13, 11, 9, 8, 6, 5, 3, 2, 0, -2, -3, -5, -7, -9, -11, -12, -14, -16, -18, -20, -22, -23, -25, -27, -28, -29, -30, -31, -32, -33, -33, -34, -34, -35, -35, -35, -35, -35, -35, -35, -35, -35, -34, -34, -33, -33, -32, -31, -30, -29, -29, -28, -27, -26, -24, -23, -22, -20, -18, -16, -15, -13, -10, -6, -3, -1, 1, 2, 2, 3, 1, -1, 0, 2, 3, 4, 5, 5, 6, 7, 7, 7, 8, 9, 11, 13, 16, 16, 18, 21, 22, 22, 22, 22, 24, 23, 25, 25, 20, 21, 20, 22,
- /* -38.0 */ 21, 23, 23, 22, 20, 18, 16, 14, 13, 13, 11, 12, 12, 9, 8, 7, 6, 5, 4, 4, 4, 3, 2, 1, -0, -1, -2, -3, -4, -5, -6, -7, -7, -8, -8, -9, -10, -10, -11, -11, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -13, -13, -12, -12, -12, -11, -11, -10, -10, -10, -10, -10, -10, -9, -9, -9, -8, -8, -7, -7, -6, -5, -4, -4, -3, -3, -2, -2, -2, -2, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 9, 14, 20, 21, 24, 24, 21, 19, 18, 16, 16, 15, 16, 15, 14, 15, 15, 15, 13, 11, 9, 4, 2, 1, -1, -2, -3, -4, -5, -5, -6, -6, -7, -7, -7, -7, -7, -6, -5, -4, -3, -1, 1, 2, 4, 6, 8, 9, 11, 13, 14, 15, 16, 18, 19, 20, 20, 21, 22, 22, 22, 22, 22, 21, 21, 21, 21, 20, 20, 19, 19, 17, 16, 16, 16, 17, 17, 18, 19, 19, 20, 21, 22, 23, 23, 23, 24, 25, 26, 26, 27, 27, 27, 27, 27, 28, 29, 29, 29, 29, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 30, 30, 31, 32, 34, 35, 36, 37, 38, 39, 39, 41, 41, 41, 41, 39, 37, 36, 34, 32, 31, 29, 27, 26, 26, 25, 25, 25, 25, 24, 24, 23, 22, 21, 20, 19, 17, 16, 15, 14, 14, 13, 14, 12, 9, 7, 6, 4, 3, 1, -0, -2, -4, -6, -8, -10, -11, -13, -15, -17, -19, -21, -22, -24, -26, -27, -29, -30, -31, -32, -33, -34, -34, -34, -35, -35, -36, -36, -36, -37, -36, -37, -36, -36, -35, -35, -35, -34, -33, -33, -32, -31, -30, -29, -28, -27, -26, -24, -22, -21, -19, -17, -15, -12, -8, -4, -1, 2, 3, 4, 7, 7, 6, 7, 6, 2, 4, 5, 6, 7, 8, 9, 9, 9, 10, 11, 12, 13, 17, 18, 19, 21, 24, 25, 25, 24, 25, 26, 28, 30, 29, 26, 22, 21, 21,
- /* -37.0 */ 20, 21, 23, 23, 22, 20, 18, 17, 15, 15, 14, 13, 12, 11, 10, 8, 7, 6, 6, 5, 4, 3, 2, 1, -0, -1, -2, -3, -4, -5, -6, -6, -7, -7, -8, -8, -9, -10, -10, -10, -10, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -12, -12, -12, -12, -12, -11, -11, -10, -10, -10, -10, -10, -10, -9, -9, -8, -8, -7, -7, -6, -6, -5, -4, -4, -3, -3, -3, -3, -2, -2, -2, -2, -1, 0, 1, 2, 3, 5, 6, 7, 8, 9, 11, 11, 9, 12, 21, 21, 25, 25, 23, 20, 18, 17, 17, 17, 17, 16, 17, 17, 16, 15, 14, 12, 10, 8, 4, 2, -0, -2, -3, -4, -5, -5, -6, -6, -7, -7, -7, -7, -7, -6, -5, -4, -2, -1, 1, 2, 4, 6, 7, 9, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 21, 21, 21, 21, 21, 20, 20, 19, 19, 19, 19, 18, 18, 18, 17, 16, 16, 17, 17, 18, 18, 19, 20, 21, 22, 23, 23, 24, 24, 25, 25, 26, 26, 26, 27, 27, 27, 29, 29, 29, 29, 28, 30, 30, 30, 29, 30, 29, 30, 30, 31, 31, 30, 29, 28, 29, 30, 31, 31, 32, 34, 36, 37, 37, 37, 38, 39, 39, 38, 36, 36, 33, 31, 30, 28, 26, 25, 25, 24, 24, 24, 24, 23, 23, 22, 21, 19, 18, 17, 16, 15, 14, 13, 12, 12, 11, 10, 8, 5, 4, 2, 0, -1, -3, -5, -7, -8, -10, -12, -14, -16, -17, -19, -21, -23, -25, -26, -28, -29, -31, -32, -33, -34, -35, -36, -37, -37, -38, -39, -39, -39, -39, -39, -38, -39, -39, -38, -38, -37, -36, -35, -35, -34, -33, -32, -30, -29, -28, -27, -26, -25, -23, -21, -18, -13, -9, -6, -4, -1, 2, 4, 5, 7, 9, 12, 14, 14, 12, 6, 7, 8, 9, 10, 12, 11, 12, 12, 13, 14, 16, 17, 19, 21, 22, 24, 25, 26, 27, 27, 28, 29, 32, 33, 33, 30, 23, 21, 20,
- /* -36.0 */ 23, 17, 22, 24, 24, 23, 21, 19, 18, 16, 16, 14, 14, 12, 11, 9, 9, 7, 6, 5, 4, 3, 2, 1, -0, -1, -2, -3, -3, -4, -4, -5, -6, -7, -7, -8, -9, -9, -9, -10, -10, -10, -10, -11, -11, -12, -11, -11, -11, -11, -11, -12, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10, -9, -9, -8, -8, -8, -7, -7, -6, -6, -5, -5, -4, -4, -3, -3, -3, -3, -3, -2, -2, -1, -0, 1, 2, 3, 5, 6, 7, 8, 10, 11, 12, 11, 9, 19, 21, 25, 27, 26, 23, 20, 19, 18, 18, 18, 18, 17, 17, 17, 17, 15, 13, 11, 9, 7, 4, 1, -1, -3, -5, -5, -6, -6, -6, -7, -7, -7, -7, -7, -6, -5, -4, -3, -1, 1, 2, 4, 6, 7, 9, 10, 12, 13, 14, 16, 17, 18, 18, 19, 20, 20, 20, 20, 19, 19, 18, 18, 18, 18, 18, 17, 17, 17, 18, 17, 17, 17, 17, 18, 18, 19, 19, 20, 21, 22, 23, 24, 24, 25, 25, 26, 26, 26, 27, 27, 28, 29, 31, 31, 30, 28, 28, 28, 28, 28, 28, 28, 28, 28, 30, 30, 30, 29, 27, 27, 27, 27, 28, 28, 30, 32, 34, 35, 35, 34, 34, 34, 35, 34, 34, 33, 33, 31, 29, 27, 25, 24, 24, 24, 24, 24, 23, 23, 22, 20, 19, 18, 17, 15, 14, 13, 12, 11, 11, 10, 9, 8, 6, 4, 1, -0, -2, -3, -5, -7, -9, -11, -12, -14, -16, -18, -20, -22, -24, -25, -27, -28, -30, -31, -33, -33, -36, -37, -38, -39, -39, -40, -40, -40, -41, -41, -40, -39, -38, -38, -38, -38, -39, -38, -37, -36, -36, -35, -34, -33, -31, -30, -29, -28, -26, -24, -21, -18, -11, -7, -5, -3, -1, 1, 3, 5, 6, 8, 10, 12, 16, 19, 17, 10, 9, 10, 12, 13, 14, 14, 15, 15, 16, 18, 19, 20, 22, 24, 25, 25, 27, 28, 29, 29, 31, 33, 36, 37, 36, 34, 33, 28, 23,
- /* -35.0 */ 28, 18, 20, 25, 26, 25, 23, 21, 20, 19, 17, 16, 14, 13, 12, 10, 9, 8, 6, 5, 5, 3, 2, 1, 0, -0, -1, -2, -3, -3, -4, -5, -6, -6, -7, -8, -8, -9, -9, -9, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10, -9, -9, -9, -8, -7, -7, -6, -6, -6, -6, -6, -5, -4, -4, -3, -3, -3, -3, -2, -2, -2, -1, -0, 1, 2, 4, 5, 6, 7, 8, 10, 11, 13, 13, 10, 12, 21, 25, 30, 26, 22, 21, 20, 20, 19, 18, 18, 17, 17, 17, 16, 15, 14, 13, 10, 9, 8, 3, -0, -3, -5, -6, -6, -6, -7, -7, -8, -7, -7, -7, -6, -5, -4, -3, -1, 0, 2, 5, 7, 6, 8, 9, 11, 12, 14, 15, 16, 16, 17, 18, 18, 18, 19, 19, 18, 18, 18, 17, 17, 17, 17, 17, 17, 18, 17, 17, 17, 18, 18, 18, 19, 20, 20, 20, 21, 21, 22, 23, 24, 25, 25, 26, 26, 26, 26, 28, 30, 31, 32, 31, 30, 29, 29, 26, 27, 28, 27, 26, 26, 27, 28, 30, 30, 29, 27, 25, 25, 25, 26, 26, 27, 30, 33, 33, 33, 32, 31, 31, 31, 31, 30, 31, 30, 30, 29, 26, 25, 23, 22, 22, 22, 22, 22, 21, 20, 19, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 4, 2, -1, -2, -4, -6, -7, -9, -11, -13, -15, -17, -18, -20, -22, -24, -26, -28, -29, -30, -32, -33, -34, -37, -38, -40, -40, -40, -40, -40, -39, -38, -39, -40, -38, -35, -33, -32, -32, -34, -35, -35, -34, -33, -33, -33, -33, -33, -32, -31, -28, -25, -22, -19, -15, -11, -7, -4, -2, -0, 1, 2, 4, 6, 8, 10, 12, 14, 17, 20, 20, 17, 11, 13, 14, 15, 16, 17, 17, 17, 19, 21, 22, 24, 25, 26, 26, 27, 28, 31, 32, 32, 34, 38, 39, 38, 38, 38, 38, 37, 28,
- /* -34.0 */ 37, 24, 18, 25, 27, 27, 26, 23, 21, 20, 17, 16, 16, 14, 12, 11, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -0, -2, -2, -3, -3, -4, -4, -5, -6, -7, -8, -9, -9, -10, -10, -10, -11, -11, -11, -12, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -12, -12, -12, -12, -11, -12, -11, -11, -11, -11, -11, -10, -10, -10, -10, -9, -9, -9, -8, -8, -7, -7, -7, -6, -6, -6, -6, -5, -5, -4, -4, -3, -3, -2, -2, -2, -1, -1, 0, 1, 2, 3, 5, 7, 7, 10, 10, 11, 12, 14, 13, 8, 19, 25, 32, 24, 22, 22, 23, 22, 21, 19, 18, 17, 17, 17, 17, 16, 16, 15, 13, 10, 8, 6, 2, -1, -3, -5, -6, -6, -7, -7, -8, -7, -7, -7, -6, -5, -4, -3, -1, 1, 3, 3, 5, 6, 7, 9, 9, 11, 12, 13, 14, 15, 16, 16, 17, 18, 18, 18, 18, 17, 17, 16, 16, 16, 16, 16, 16, 17, 18, 17, 18, 19, 18, 20, 20, 20, 21, 21, 21, 22, 23, 23, 24, 25, 25, 26, 26, 26, 27, 29, 31, 32, 33, 33, 32, 31, 30, 28, 27, 29, 28, 26, 26, 26, 27, 29, 29, 29, 26, 23, 23, 23, 23, 24, 25, 28, 31, 33, 31, 30, 28, 28, 28, 27, 27, 27, 28, 29, 27, 25, 24, 22, 21, 20, 20, 20, 20, 19, 18, 17, 16, 15, 14, 12, 11, 10, 9, 8, 7, 6, 5, 3, 1, -1, -2, -4, -6, -8, -9, -11, -13, -15, -17, -19, -21, -22, -24, -26, -28, -30, -31, -32, -33, -35, -37, -38, -40, -41, -41, -40, -40, -40, -37, -36, -37, -38, -36, -33, -31, -28, -28, -30, -30, -30, -30, -29, -27, -26, -27, -28, -28, -27, -24, -22, -18, -14, -11, -8, -4, -2, 1, 3, 4, 4, 6, 8, 10, 12, 14, 17, 19, 22, 24, 22, 18, 15, 17, 18, 19, 19, 20, 20, 23, 24, 26, 27, 27, 27, 28, 30, 32, 32, 33, 36, 39, 39, 39, 39, 40, 40, 41, 41, 37,
- /* -33.0 */ 43, 35, 18, 24, 28, 28, 27, 24, 23, 20, 19, 18, 16, 14, 12, 11, 10, 9, 8, 7, 6, 5, 3, 2, 1, 1, -0, -1, -2, -2, -3, -4, -4, -5, -6, -7, -8, -9, -9, -10, -10, -10, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10, -9, -9, -9, -8, -8, -8, -7, -7, -7, -6, -6, -6, -6, -5, -5, -4, -3, -3, -2, -2, -2, -1, -1, -0, 0, 1, 3, 4, 5, 6, 6, 8, 9, 11, 12, 14, 15, 10, 15, 26, 32, 23, 21, 23, 25, 25, 23, 20, 19, 18, 17, 18, 17, 17, 16, 15, 13, 11, 8, 7, 4, -0, -3, -4, -5, -6, -7, -8, -8, -8, -8, -7, -6, -5, -3, -2, -1, 1, 2, 3, 4, 6, 7, 7, 8, 9, 11, 12, 13, 14, 14, 15, 16, 16, 17, 17, 17, 17, 16, 16, 16, 16, 16, 16, 16, 17, 17, 19, 19, 19, 20, 20, 23, 21, 22, 22, 22, 23, 23, 24, 24, 25, 26, 27, 27, 27, 28, 31, 31, 33, 34, 34, 32, 31, 29, 28, 29, 29, 30, 29, 25, 25, 25, 26, 27, 29, 26, 22, 20, 21, 21, 22, 23, 26, 31, 30, 28, 26, 25, 25, 24, 24, 23, 23, 24, 25, 25, 24, 22, 21, 19, 19, 18, 18, 17, 17, 16, 15, 14, 13, 12, 11, 9, 8, 7, 6, 5, 4, 3, 1, -1, -3, -5, -7, -8, -10, -11, -12, -15, -17, -19, -21, -23, -25, -27, -28, -30, -32, -33, -34, -35, -37, -39, -39, -40, -41, -40, -40, -41, -40, -38, -38, -39, -38, -36, -33, -30, -27, -27, -28, -28, -28, -28, -27, -26, -23, -22, -21, -21, -21, -19, -17, -15, -14, -11, -7, -2, 1, 3, 7, 7, 8, 8, 9, 12, 14, 17, 19, 22, 25, 27, 26, 25, 20, 19, 21, 24, 22, 24, 24, 27, 28, 29, 30, 29, 30, 30, 34, 34, 35, 36, 37, 38, 40, 40, 40, 41, 42, 42, 43, 43,
- /* -32.0 */ 44, 41, 23, 20, 28, 30, 29, 25, 24, 21, 20, 19, 17, 15, 13, 12, 11, 10, 8, 7, 6, 4, 3, 2, 1, 1, 0, -0, -2, -2, -3, -3, -4, -5, -6, -7, -8, -9, -9, -10, -10, -10, -10, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10, -9, -9, -9, -9, -8, -8, -8, -7, -7, -7, -6, -6, -6, -6, -5, -5, -4, -4, -3, -2, -2, -1, -1, -1, -0, 0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 12, 13, 15, 16, 12, 15, 29, 32, 26, 21, 24, 25, 27, 25, 22, 20, 18, 17, 17, 17, 16, 15, 14, 13, 11, 8, 6, 5, -1, -3, -4, -5, -6, -8, -8, -7, -8, -7, -7, -6, -5, -2, -1, 0, 1, 2, 3, 4, 6, 6, 7, 8, 9, 10, 11, 12, 13, 13, 14, 15, 15, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 16, 17, 18, 19, 19, 19, 20, 20, 23, 21, 23, 23, 23, 23, 24, 24, 25, 25, 27, 27, 28, 29, 31, 30, 32, 33, 35, 37, 36, 35, 34, 34, 33, 33, 31, 31, 27, 24, 23, 23, 24, 25, 24, 20, 18, 18, 19, 20, 21, 24, 26, 26, 25, 23, 23, 21, 21, 20, 20, 20, 20, 21, 22, 21, 21, 21, 19, 16, 16, 15, 15, 14, 14, 13, 12, 11, 10, 9, 8, 6, 5, 4, 3, 2, 0, -2, -4, -6, -7, -9, -11, -13, -14, -15, -16, -19, -21, -23, -25, -26, -28, -30, -29, -31, -32, -34, -35, -36, -37, -40, -40, -41, -40, -41, -41, -40, -39, -39, -39, -38, -36, -35, -31, -27, -27, -26, -25, -26, -26, -24, -24, -22, -20, -19, -20, -19, -18, -15, -12, -12, -9, -4, 0, 2, 4, 9, 10, 12, 13, 12, 13, 16, 20, 22, 24, 26, 28, 30, 29, 27, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 31, 32, 32, 36, 37, 37, 39, 40, 41, 42, 42, 42, 42, 43, 43, 44, 44,
- /* -31.0 */ 46, 45, 33, 19, 28, 31, 29, 28, 26, 23, 21, 19, 17, 16, 14, 12, 11, 10, 8, 7, 6, 4, 3, 2, 1, 1, -0, -1, -1, -2, -2, -3, -3, -5, -6, -7, -8, -8, -9, -9, -9, -9, -10, -11, -11, -12, -12, -13, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10, -9, -9, -9, -9, -8, -8, -8, -8, -7, -7, -7, -6, -6, -6, -5, -5, -5, -4, -4, -3, -2, -2, -1, -0, -0, 0, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13, 14, 16, 13, 17, 31, 33, 27, 24, 25, 25, 27, 26, 22, 20, 18, 17, 17, 16, 15, 15, 14, 13, 11, 8, 6, 4, 1, -3, -5, -6, -8, -8, -8, -8, -9, -8, -7, -5, -4, -1, 1, 3, 3, 2, 3, 4, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 12, 13, 14, 14, 15, 16, 16, 15, 15, 15, 15, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 22, 24, 23, 23, 23, 24, 24, 25, 26, 26, 27, 28, 29, 29, 31, 31, 32, 33, 35, 35, 35, 35, 35, 34, 35, 36, 36, 32, 30, 25, 22, 22, 22, 22, 22, 17, 16, 16, 16, 16, 18, 20, 22, 22, 22, 21, 19, 18, 17, 17, 17, 17, 18, 18, 18, 18, 19, 18, 18, 15, 14, 13, 13, 13, 12, 11, 10, 9, 8, 7, 6, 4, 3, 2, 1, -0, -2, -4, -6, -8, -10, -12, -13, -15, -17, -17, -18, -21, -23, -25, -27, -28, -28, -30, -32, -34, -34, -36, -37, -37, -39, -39, -39, -40, -40, -40, -40, -40, -40, -39, -38, -37, -36, -31, -30, -26, -25, -25, -24, -24, -23, -24, -21, -20, -20, -19, -20, -18, -16, -13, -9, -7, -6, -2, 1, 4, 7, 11, 10, 14, 16, 16, 17, 18, 22, 24, 25, 27, 30, 32, 33, 31, 25, 26, 29, 28, 29, 31, 32, 33, 33, 34, 34, 34, 35, 37, 39, 40, 41, 42, 43, 45, 43, 43, 43, 44, 44, 45, 46,
- /* -30.0 */ 48, 46, 40, 26, 25, 31, 31, 30, 27, 25, 23, 21, 19, 16, 15, 14, 12, 10, 9, 7, 6, 4, 3, 2, 1, 1, -0, -1, -2, -2, -1, -2, -4, -5, -6, -6, -7, -7, -8, -8, -9, -9, -10, -11, -11, -12, -13, -13, -13, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -11, -10, -10, -10, -10, -10, -9, -9, -9, -8, -8, -8, -8, -7, -7, -7, -6, -6, -6, -5, -5, -4, -4, -4, -3, -3, -2, -2, -1, 0, 0, 1, 1, 1, 2, 2, 3, 4, 5, 5, 7, 8, 9, 10, 12, 13, 15, 16, 14, 15, 33, 37, 32, 27, 25, 24, 24, 26, 23, 21, 19, 18, 17, 15, 14, 13, 11, 10, 9, 6, 4, 3, 3, 1, -4, -6, -7, -8, -8, -9, -10, -9, -7, -6, -4, -1, -0, 0, 1, 1, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 9, 10, 11, 12, 13, 13, 14, 15, 15, 15, 15, 15, 15, 15, 16, 16, 17, 17, 18, 19, 20, 21, 23, 23, 25, 22, 23, 24, 24, 25, 26, 26, 26, 27, 28, 29, 32, 31, 32, 34, 35, 34, 33, 33, 33, 33, 32, 34, 33, 36, 35, 30, 28, 24, 21, 21, 20, 20, 16, 14, 13, 14, 14, 15, 15, 18, 19, 19, 18, 16, 15, 14, 14, 14, 15, 15, 15, 14, 14, 14, 15, 15, 14, 13, 12, 11, 10, 10, 9, 8, 7, 6, 5, 4, 3, 1, 0, -1, -3, -5, -7, -9, -11, -13, -15, -16, -18, -19, -20, -21, -23, -25, -27, -30, -31, -31, -32, -33, -35, -36, -37, -38, -38, -38, -39, -39, -39, -40, -39, -40, -40, -40, -39, -37, -36, -33, -29, -27, -24, -24, -22, -23, -22, -22, -21, -20, -18, -18, -17, -18, -17, -14, -10, -6, -4, -1, 0, 3, 6, 8, 12, 13, 15, 18, 19, 21, 22, 24, 26, 28, 28, 32, 34, 36, 35, 30, 29, 29, 30, 32, 33, 33, 35, 36, 36, 36, 36, 37, 39, 42, 43, 44, 45, 45, 46, 45, 45, 45, 45, 45, 46, 48,
- /* -29.0 */ 48, 47, 46, 35, 23, 30, 31, 31, 28, 26, 23, 21, 19, 17, 15, 14, 12, 10, 9, 7, 6, 4, 3, 2, 1, 0, -0, -1, -2, -2, -2, -3, -4, -5, -5, -5, -6, -7, -7, -8, -8, -10, -11, -12, -12, -13, -13, -13, -14, -13, -13, -13, -13, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10, -9, -9, -9, -8, -8, -8, -7, -7, -7, -6, -6, -6, -6, -5, -5, -5, -4, -4, -3, -3, -3, -2, -2, -1, -0, 0, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14, 15, 17, 16, 14, 31, 38, 35, 31, 28, 26, 26, 24, 24, 22, 20, 19, 17, 16, 14, 11, 10, 9, 8, 7, 6, 4, 2, 1, -3, -6, -8, -9, -9, -9, -9, -9, -8, -8, -6, -4, -3, -1, 0, 1, 2, 2, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 12, 13, 14, 15, 14, 15, 15, 15, 15, 15, 16, 17, 18, 18, 19, 20, 21, 22, 24, 24, 23, 24, 24, 24, 25, 25, 26, 26, 27, 28, 30, 32, 31, 32, 32, 32, 31, 31, 32, 32, 31, 31, 31, 31, 34, 35, 29, 27, 25, 19, 18, 18, 18, 13, 12, 11, 11, 12, 12, 11, 13, 15, 15, 15, 15, 13, 11, 10, 10, 11, 11, 11, 10, 10, 10, 11, 11, 10, 11, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 0, -1, -2, -4, -6, -8, -10, -12, -14, -15, -17, -19, -20, -22, -23, -25, -27, -29, -31, -33, -33, -33, -34, -36, -37, -36, -37, -38, -39, -38, -38, -38, -39, -39, -39, -39, -40, -39, -38, -36, -34, -28, -26, -23, -23, -21, -21, -20, -20, -18, -17, -17, -16, -16, -16, -16, -15, -12, -9, -4, -1, 2, 4, 5, 8, 10, 12, 14, 16, 19, 20, 23, 25, 26, 28, 30, 31, 33, 35, 37, 37, 34, 31, 33, 32, 34, 35, 35, 37, 38, 39, 38, 38, 40, 41, 46, 45, 46, 47, 47, 47, 47, 46, 47, 47, 46, 46, 48,
- /* -28.0 */ 48, 49, 48, 41, 25, 30, 35, 32, 30, 27, 24, 22, 19, 17, 15, 13, 12, 10, 9, 7, 6, 5, 4, 2, 1, 0, -0, -1, -1, -1, -2, -3, -4, -4, -5, -5, -4, -5, -6, -8, -9, -11, -11, -12, -13, -13, -13, -14, -14, -13, -13, -13, -12, -12, -11, -11, -11, -10, -10, -10, -9, -9, -9, -9, -8, -8, -7, -7, -7, -6, -6, -6, -6, -5, -5, -5, -4, -4, -4, -3, -3, -3, -2, -2, -1, -1, -0, 0, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 6, 7, 8, 9, 11, 12, 14, 15, 17, 17, 13, 26, 35, 38, 35, 29, 29, 27, 24, 24, 23, 21, 20, 18, 16, 14, 11, 9, 8, 8, 7, 6, 6, 2, 1, -2, -6, -8, -10, -10, -11, -11, -11, -10, -9, -7, -6, -4, -3, -2, -1, -0, -0, 1, 1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 12, 13, 14, 14, 14, 14, 15, 15, 15, 16, 17, 17, 18, 19, 20, 21, 22, 23, 25, 24, 24, 25, 25, 25, 25, 26, 26, 27, 28, 30, 32, 32, 32, 32, 32, 30, 31, 31, 33, 31, 30, 30, 30, 32, 32, 28, 26, 24, 19, 18, 17, 15, 12, 10, 8, 9, 10, 10, 9, 8, 12, 12, 12, 12, 11, 8, 7, 7, 7, 8, 8, 8, 7, 7, 7, 7, 8, 9, 8, 8, 7, 7, 6, 4, 3, 2, 1, -0, -2, -3, -5, -7, -9, -11, -13, -15, -17, -19, -20, -22, -23, -24, -26, -28, -30, -31, -34, -35, -35, -36, -37, -38, -38, -37, -38, -39, -39, -38, -38, -38, -39, -39, -39, -39, -39, -38, -37, -34, -29, -24, -21, -20, -20, -20, -19, -18, -16, -15, -14, -14, -14, -13, -12, -12, -12, -10, -9, -6, 0, 4, 5, 8, 9, 11, 13, 15, 18, 20, 22, 25, 27, 29, 30, 32, 33, 35, 38, 40, 40, 38, 35, 36, 35, 36, 36, 38, 39, 41, 41, 41, 40, 42, 44, 46, 47, 47, 48, 48, 49, 49, 48, 48, 47, 47, 47, 48,
- /* -27.0 */ 48, 50, 49, 45, 29, 31, 34, 33, 31, 28, 25, 22, 19, 17, 15, 13, 12, 10, 9, 7, 7, 5, 4, 2, 2, 0, -0, -1, -1, -1, -2, -3, -4, -4, -4, -4, -5, -6, -7, -9, -10, -11, -12, -12, -13, -13, -13, -13, -13, -13, -13, -12, -12, -12, -11, -11, -10, -10, -9, -9, -9, -8, -8, -8, -7, -7, -6, -6, -6, -5, -5, -5, -5, -5, -4, -4, -3, -3, -3, -3, -2, -2, -2, -1, -1, -0, 0, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 16, 18, 19, 13, 23, 35, 41, 41, 37, 36, 26, 25, 24, 24, 22, 21, 19, 17, 15, 11, 8, 6, 5, 7, 6, 4, 1, 0, -3, -7, -8, -11, -10, -10, -11, -12, -9, -9, -8, -7, -5, -4, -3, -3, -2, -2, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 14, 14, 14, 15, 15, 15, 16, 17, 17, 18, 19, 20, 21, 22, 22, 24, 26, 25, 25, 25, 25, 25, 25, 25, 26, 28, 31, 32, 33, 33, 31, 32, 30, 29, 28, 29, 28, 29, 29, 29, 29, 29, 28, 24, 22, 18, 15, 14, 13, 11, 7, 6, 6, 7, 7, 7, 6, 9, 10, 9, 8, 6, 5, 4, 4, 4, 4, 5, 5, 5, 4, 4, 4, 4, 5, 6, 6, 6, 5, 3, 3, 1, 0, -1, -2, -4, -6, -8, -10, -12, -14, -16, -18, -19, -21, -23, -24, -26, -27, -27, -29, -32, -34, -36, -37, -38, -39, -39, -40, -40, -40, -40, -40, -39, -39, -38, -38, -38, -38, -38, -38, -38, -37, -34, -30, -26, -23, -20, -18, -18, -18, -17, -15, -14, -13, -12, -11, -10, -10, -8, -7, -5, -2, 0, 0, 1, 4, 7, 9, 12, 14, 16, 18, 20, 22, 24, 26, 29, 32, 34, 35, 36, 38, 41, 43, 43, 39, 37, 37, 37, 38, 41, 41, 42, 43, 44, 44, 43, 45, 46, 48, 49, 50, 50, 50, 50, 50, 50, 49, 48, 48, 47, 48,
- /* -26.0 */ 49, 51, 50, 47, 34, 32, 34, 34, 31, 28, 25, 22, 20, 17, 15, 14, 12, 10, 9, 8, 7, 6, 4, 3, 2, 1, 0, -0, -1, -2, -2, -3, -4, -3, -5, -6, -7, -8, -9, -10, -11, -11, -12, -12, -13, -13, -13, -13, -13, -13, -13, -12, -11, -11, -11, -10, -10, -9, -9, -8, -8, -7, -7, -6, -6, -6, -6, -6, -5, -5, -5, -5, -5, -4, -4, -3, -3, -3, -2, -2, -2, -2, -1, -1, -0, -0, 0, 1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 6, 6, 8, 9, 9, 11, 13, 15, 16, 17, 18, 16, 20, 34, 41, 43, 41, 36, 29, 27, 25, 25, 23, 21, 19, 17, 14, 11, 7, 5, 4, 5, 5, 4, 2, -0, -2, -6, -10, -11, -11, -10, -11, -11, -11, -10, -9, -7, -6, -5, -5, -4, -4, -4, -3, -2, -1, -0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 14, 14, 14, 14, 15, 16, 16, 17, 18, 19, 19, 20, 21, 22, 23, 25, 27, 29, 24, 25, 25, 25, 25, 26, 28, 31, 32, 34, 34, 30, 28, 29, 28, 27, 27, 26, 26, 26, 26, 26, 27, 26, 20, 19, 16, 13, 12, 10, 10, 6, 5, 4, 5, 5, 4, 5, 8, 9, 7, 5, 3, 2, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 2, 3, 2, 2, 1, 1, 0, -1, -2, -4, -5, -7, -9, -11, -13, -15, -17, -19, -20, -22, -24, -25, -27, -29, -30, -29, -31, -34, -36, -38, -39, -40, -40, -41, -42, -42, -42, -41, -39, -40, -40, -39, -38, -37, -37, -37, -38, -37, -35, -31, -27, -24, -22, -19, -17, -17, -17, -14, -12, -11, -11, -10, -8, -7, -6, -2, 0, 3, 4, 1, 2, 4, 8, 10, 12, 14, 17, 19, 21, 23, 24, 26, 28, 31, 35, 38, 39, 40, 42, 45, 45, 45, 42, 40, 40, 40, 41, 41, 43, 45, 46, 47, 46, 46, 47, 49, 50, 51, 51, 51, 52, 52, 51, 51, 50, 49, 49, 49, 49,
- /* -25.0 */ 50, 51, 51, 50, 39, 28, 34, 34, 31, 28, 25, 22, 19, 17, 15, 14, 12, 10, 10, 9, 8, 7, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -4, -5, -5, -7, -8, -9, -9, -10, -11, -11, -12, -12, -12, -13, -13, -13, -13, -12, -11, -11, -11, -11, -10, -10, -9, -9, -8, -8, -7, -7, -6, -6, -5, -5, -5, -5, -5, -5, -5, -4, -4, -4, -3, -3, -3, -3, -2, -2, -2, -1, -1, -1, -0, -0, 0, 1, 1, 1, 2, 2, 3, 3, 3, 4, 5, 5, 8, 8, 8, 10, 11, 12, 14, 17, 18, 19, 16, 18, 36, 38, 41, 43, 39, 29, 27, 26, 25, 23, 21, 19, 17, 13, 10, 6, 4, 3, 2, 3, 4, 2, -1, -2, -3, -6, -10, -12, -11, -12, -11, -11, -9, -9, -8, -7, -7, -6, -6, -6, -5, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 12, 12, 13, 13, 13, 14, 14, 14, 15, 16, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 28, 26, 24, 24, 24, 24, 25, 28, 30, 32, 33, 33, 29, 28, 28, 27, 26, 24, 24, 24, 22, 21, 21, 19, 21, 15, 15, 12, 11, 11, 8, 7, 6, 4, 3, 3, 3, 2, 5, 8, 9, 7, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, -0, -0, -1, -2, -3, -4, -5, -6, -8, -10, -12, -14, -16, -18, -20, -22, -24, -25, -27, -28, -30, -32, -33, -32, -33, -36, -38, -39, -41, -41, -42, -43, -43, -43, -43, -43, -42, -41, -40, -39, -38, -38, -37, -37, -35, -34, -34, -30, -25, -22, -21, -18, -16, -16, -15, -12, -9, -7, -6, -7, -6, -4, -3, -3, 0, 2, 3, 3, 5, 7, 10, 13, 16, 19, 21, 24, 26, 27, 28, 29, 32, 34, 38, 41, 44, 46, 46, 47, 47, 47, 43, 43, 41, 43, 44, 44, 48, 47, 48, 49, 48, 48, 49, 51, 53, 54, 53, 52, 53, 53, 52, 52, 51, 50, 49, 49, 50,
- /* -24.0 */ 50, 52, 52, 51, 45, 24, 32, 33, 31, 28, 25, 22, 20, 17, 15, 14, 12, 11, 11, 10, 8, 7, 6, 4, 3, 2, 1, 0, -1, -2, -4, -4, -4, -5, -6, -8, -8, -9, -9, -10, -11, -11, -12, -12, -12, -13, -12, -12, -12, -12, -11, -11, -11, -10, -10, -10, -9, -9, -8, -7, -7, -6, -6, -5, -5, -5, -4, -4, -4, -4, -4, -4, -4, -4, -4, -3, -3, -3, -3, -2, -2, -2, -1, -1, -1, -0, 0, 0, 1, 1, 1, 2, 2, 3, 3, 4, 4, 6, 6, 8, 8, 9, 11, 12, 14, 16, 18, 19, 17, 17, 32, 34, 40, 43, 43, 31, 27, 24, 24, 23, 20, 18, 16, 13, 9, 5, 2, 1, -1, -0, -0, -1, -3, -2, -3, -4, -6, -8, -9, -10, -12, -11, -10, -9, -9, -8, -7, -7, -6, -6, -6, -6, -5, -5, -4, -3, -2, -1, 0, 2, 3, 4, 5, 7, 8, 9, 11, 12, 12, 13, 13, 13, 13, 14, 14, 15, 16, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 25, 23, 23, 23, 23, 25, 28, 29, 31, 33, 32, 29, 27, 26, 26, 24, 23, 22, 21, 19, 17, 19, 18, 15, 11, 12, 9, 8, 9, 6, 4, 4, 3, 2, 2, 1, -0, 5, 7, 8, 6, 2, -1, -2, -2, -1, -1, -1, -1, -0, -1, -2, -2, -2, -1, -1, -2, -2, -3, -3, -4, -5, -6, -8, -9, -11, -13, -15, -17, -19, -22, -23, -25, -27, -29, -30, -31, -33, -34, -35, -35, -36, -38, -41, -42, -43, -43, -43, -44, -44, -44, -45, -44, -43, -42, -41, -40, -39, -37, -37, -35, -32, -32, -33, -30, -25, -21, -19, -16, -13, -11, -10, -8, -5, -4, -4, -4, -3, -1, 0, 2, 3, 4, 3, 5, 7, 10, 13, 17, 22, 24, 26, 28, 31, 32, 32, 33, 35, 38, 42, 46, 47, 48, 49, 49, 49, 48, 45, 44, 46, 47, 46, 47, 48, 49, 51, 50, 50, 50, 51, 54, 55, 55, 54, 53, 53, 54, 54, 53, 52, 51, 50, 50, 50,
- /* -23.0 */ 50, 52, 52, 52, 51, 29, 28, 31, 30, 28, 25, 23, 20, 18, 16, 14, 13, 12, 11, 10, 9, 8, 6, 5, 3, 3, 2, 1, -1, -1, -3, -4, -5, -7, -7, -8, -8, -9, -9, -10, -10, -11, -11, -11, -12, -11, -12, -12, -11, -11, -11, -11, -11, -10, -10, -10, -9, -8, -8, -7, -6, -6, -5, -5, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -2, -2, -2, -2, -1, -1, -1, -0, 0, 0, 1, 1, 2, 2, 3, 4, 4, 6, 7, 7, 8, 9, 10, 12, 14, 16, 18, 20, 18, 15, 33, 36, 40, 44, 43, 37, 25, 24, 23, 21, 19, 18, 16, 13, 9, 5, -0, -2, -3, -4, -5, -5, -5, -4, -2, -3, -4, -6, -6, -6, -11, -11, -10, -9, -9, -8, -8, -7, -7, -6, -6, -6, -6, -6, -5, -4, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 10, 11, 12, 12, 13, 13, 13, 13, 14, 14, 15, 16, 17, 17, 18, 19, 20, 22, 23, 25, 26, 25, 24, 22, 22, 23, 24, 28, 29, 30, 32, 32, 30, 27, 25, 23, 22, 21, 19, 18, 17, 16, 15, 15, 14, 12, 10, 6, 6, 6, 3, 1, 0, 1, -0, -0, -1, -1, 3, 4, 6, 3, 1, -3, -4, -5, -4, -3, -3, -3, -3, -3, -4, -4, -4, -4, -4, -4, -4, -5, -6, -7, -8, -9, -11, -13, -14, -17, -18, -21, -23, -25, -27, -28, -30, -32, -33, -35, -36, -37, -38, -38, -38, -41, -43, -43, -44, -45, -45, -45, -45, -46, -46, -45, -44, -43, -41, -39, -37, -37, -36, -34, -32, -31, -32, -31, -27, -21, -16, -13, -10, -9, -7, -5, -5, -2, -0, 1, 2, 3, 4, 6, 8, 9, 11, 13, 15, 19, 22, 24, 26, 28, 30, 33, 36, 37, 37, 37, 39, 42, 46, 49, 50, 50, 51, 51, 51, 50, 50, 48, 48, 49, 48, 50, 51, 52, 52, 52, 52, 52, 53, 57, 58, 57, 52, 49, 50, 50, 52, 53, 54, 52, 51, 50, 50,
- /* -22.0 */ 50, 52, 52, 53, 52, 44, 26, 30, 30, 28, 26, 23, 21, 18, 15, 14, 13, 12, 11, 11, 10, 9, 8, 5, 4, 4, 2, 1, -0, -1, -3, -4, -5, -6, -6, -7, -8, -9, -9, -9, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -9, -8, -7, -7, -6, -5, -5, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -2, -2, -2, -1, -1, -1, -0, 0, 1, 1, 2, 2, 3, 4, 6, 6, 7, 8, 9, 10, 11, 13, 16, 17, 19, 20, 15, 33, 37, 43, 44, 42, 39, 27, 23, 21, 21, 20, 18, 16, 14, 9, 4, -1, -3, -4, -6, -6, -7, -6, -5, -3, -3, -4, -5, -5, -6, -8, -10, -10, -10, -10, -9, -8, -7, -6, -6, -6, -6, -6, -6, -6, -5, -5, -3, -2, -1, 1, 2, 3, 4, 6, 8, 9, 10, 11, 12, 12, 13, 13, 13, 13, 14, 14, 15, 16, 17, 17, 18, 19, 21, 22, 23, 24, 25, 24, 23, 22, 23, 24, 27, 28, 29, 30, 31, 29, 27, 25, 21, 19, 19, 18, 16, 16, 14, 13, 11, 10, 10, 8, 4, 3, 2, -1, -2, -3, -2, -2, -3, -3, -2, 0, 0, 4, 3, -0, -5, -7, -7, -7, -6, -5, -4, -4, -6, -6, -5, -5, -6, -6, -6, -7, -7, -8, -9, -10, -12, -14, -16, -18, -20, -22, -24, -26, -28, -30, -32, -33, -35, -37, -38, -39, -39, -40, -40, -40, -44, -45, -45, -46, -46, -46, -46, -46, -47, -47, -47, -45, -44, -42, -40, -35, -34, -36, -33, -31, -31, -31, -29, -27, -22, -15, -12, -9, -7, -7, -6, -2, 0, 3, 5, 5, 5, 7, 10, 13, 14, 15, 16, 19, 21, 25, 27, 30, 31, 34, 37, 40, 41, 41, 42, 43, 46, 49, 51, 52, 54, 53, 53, 54, 53, 52, 51, 51, 52, 51, 54, 52, 54, 54, 54, 53, 53, 59, 60, 58, 54, 51, 60, 61, 60, 58, 57, 54, 53, 51, 50, 50,
- /* -21.0 */ 50, 52, 52, 53, 53, 52, 35, 27, 30, 28, 26, 23, 20, 18, 16, 14, 14, 12, 12, 11, 11, 9, 7, 6, 5, 4, 2, 1, 0, -0, -2, -3, -4, -5, -6, -7, -8, -8, -9, -9, -10, -10, -10, -10, -11, -11, -11, -12, -12, -12, -12, -12, -11, -11, -10, -10, -9, -8, -7, -6, -6, -5, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -2, -2, -2, -1, -1, -1, 0, 0, 1, 1, 2, 3, 4, 6, 8, 8, 9, 10, 12, 14, 16, 18, 20, 20, 16, 32, 38, 43, 42, 43, 40, 29, 22, 23, 21, 21, 18, 16, 14, 9, 4, -1, -4, -6, -7, -7, -7, -7, -6, -5, -4, -4, -5, -6, -6, -8, -11, -9, -10, -8, -6, -5, -6, -5, -6, -6, -6, -7, -6, -6, -6, -5, -4, -3, -2, -0, 1, 3, 4, 6, 7, 8, 10, 12, 12, 12, 13, 13, 13, 13, 14, 14, 15, 16, 16, 17, 17, 18, 19, 20, 22, 22, 23, 23, 23, 22, 23, 25, 26, 25, 27, 29, 28, 29, 28, 24, 21, 18, 18, 16, 15, 14, 13, 12, 10, 8, 5, 4, 3, 0, -2, -4, -5, -5, -6, -7, -6, -6, -5, -4, -3, 0, 3, -1, -6, -9, -9, -9, -9, -8, -1, -2, -10, -9, -8, -7, -8, -8, -9, -9, -10, -11, -12, -13, -15, -17, -19, -22, -23, -26, -28, -30, -32, -34, -35, -37, -39, -40, -41, -42, -42, -43, -43, -43, -46, -46, -46, -47, -48, -47, -47, -47, -47, -48, -47, -46, -44, -42, -39, -37, -35, -35, -33, -31, -30, -28, -27, -24, -22, -18, -12, -9, -8, -6, -3, 1, 4, 6, 7, 8, 9, 11, 14, 16, 17, 20, 22, 24, 26, 28, 31, 32, 34, 36, 40, 44, 44, 43, 44, 47, 50, 53, 54, 55, 55, 56, 55, 56, 56, 53, 52, 54, 54, 54, 57, 54, 57, 57, 54, 54, 62, 60, 60, 57, 50, 62, 64, 64, 63, 62, 60, 59, 54, 53, 51, 50,
- /* -20.0 */ 50, 51, 51, 51, 52, 52, 43, 24, 29, 29, 26, 23, 21, 18, 16, 15, 13, 12, 11, 10, 9, 9, 10, 7, 5, 4, 3, 2, 1, -0, -1, -2, -3, -4, -6, -6, -7, -8, -8, -9, -9, -10, -10, -10, -11, -11, -11, -12, -12, -12, -11, -11, -11, -10, -10, -9, -8, -8, -7, -6, -6, -5, -4, -4, -3, -3, -3, -2, -2, -2, -2, -3, -3, -3, -3, -3, -3, -4, -4, -4, -4, -4, -4, -4, -4, -3, -3, -3, -2, -2, -1, -1, -0, 0, 1, 1, 2, 3, 5, 7, 8, 9, 11, 13, 15, 16, 18, 20, 19, 16, 34, 42, 43, 43, 44, 42, 30, 23, 24, 22, 20, 18, 16, 14, 9, 4, -1, -5, -7, -8, -8, -8, -9, -8, -8, -7, -6, -10, -6, -6, -7, -10, -7, -9, -7, -8, -7, -6, -5, -6, -6, -6, -7, -7, -7, -6, -6, -5, -3, -2, -1, 1, 3, 4, 6, 7, 8, 10, 12, 12, 12, 12, 13, 13, 13, 13, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 20, 21, 21, 23, 23, 24, 25, 25, 25, 26, 26, 26, 25, 23, 22, 19, 16, 15, 14, 13, 11, 11, 10, 10, 7, 5, 1, 1, -1, -4, -4, -9, -11, -9, -10, -10, -9, -8, -7, -6, -2, 1, -1, -7, -11, -11, -11, -11, -11, -11, -12, -12, -7, -12, -10, -11, -11, -11, -12, -12, -13, -15, -16, -18, -21, -23, -25, -27, -29, -32, -33, -35, -37, -39, -40, -42, -44, -45, -46, -47, -46, -45, -45, -48, -48, -48, -48, -48, -49, -48, -48, -48, -48, -47, -46, -44, -42, -40, -37, -35, -34, -32, -30, -28, -26, -24, -22, -19, -17, -12, -7, -6, -3, 1, 4, 8, 9, 10, 11, 14, 16, 18, 21, 23, 24, 24, 25, 28, 31, 33, 34, 37, 39, 43, 46, 45, 45, 48, 52, 55, 56, 57, 57, 57, 57, 57, 58, 56, 54, 55, 55, 55, 56, 58, 57, 58, 56, 56, 60, 59, 61, 58, 51, 55, 64, 65, 65, 64, 63, 61, 59, 57, 52, 51, 50,
- /* -19.0 */ 51, 50, 51, 51, 51, 50, 47, 26, 29, 29, 29, 25, 21, 18, 16, 14, 12, 12, 11, 10, 10, 9, 8, 6, 5, 4, 3, 2, 2, 2, 1, -0, -2, -3, -5, -6, -6, -7, -8, -8, -9, -9, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -10, -10, -9, -9, -8, -7, -7, -6, -5, -5, -4, -4, -3, -3, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -4, -4, -4, -4, -5, -5, -5, -5, -5, -4, -4, -3, -3, -3, -2, -2, -1, -1, -0, 1, 2, 3, 4, 6, 8, 10, 12, 13, 15, 17, 19, 21, 14, 20, 35, 44, 43, 44, 43, 39, 30, 22, 23, 22, 19, 17, 16, 12, 8, 4, -2, -5, -7, -8, -8, -11, -11, -9, -9, -10, -10, -11, -11, -9, -8, -7, -8, -11, -9, -8, -7, -6, -5, -5, -5, -6, -6, -7, -7, -7, -6, -5, -3, -2, -0, 1, 3, 5, 6, 7, 8, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 14, 15, 16, 16, 16, 16, 17, 17, 18, 19, 19, 19, 19, 20, 22, 24, 24, 26, 25, 23, 22, 22, 21, 20, 17, 14, 13, 12, 11, 10, 8, 6, 6, 6, 6, 2, -2, -5, -6, -7, -7, -11, -12, -13, -12, -11, -10, -10, -8, -3, -1, -2, -7, -13, -13, -14, -13, -13, -14, -15, -12, -10, -13, -13, -14, -15, -16, -15, -16, -17, -18, -20, -22, -25, -27, -29, -31, -34, -36, -37, -39, -41, -42, -44, -45, -47, -49, -49, -50, -51, -48, -47, -51, -51, -51, -50, -49, -50, -49, -49, -48, -47, -46, -45, -44, -42, -40, -37, -35, -33, -31, -29, -27, -24, -22, -20, -17, -15, -14, -7, -4, -0, 4, 8, 10, 11, 13, 16, 18, 20, 22, 24, 27, 29, 28, 29, 31, 34, 36, 37, 40, 42, 45, 47, 48, 49, 52, 56, 58, 59, 58, 58, 58, 58, 58, 59, 57, 57, 57, 58, 57, 56, 58, 58, 57, 57, 59, 59, 61, 60, 58, 53, 64, 66, 66, 65, 64, 63, 61, 59, 57, 55, 51, 51,
- /* -18.0 */ 50, 51, 50, 49, 49, 48, 47, 33, 26, 29, 27, 25, 21, 18, 16, 14, 13, 13, 11, 10, 9, 8, 7, 7, 6, 4, 5, 3, 3, 3, 3, 3, -0, -3, -4, -4, -6, -7, -6, -7, -8, -9, -9, -10, -10, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -9, -8, -7, -7, -6, -6, -5, -4, -4, -3, -3, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -4, -4, -5, -5, -5, -5, -5, -5, -5, -5, -5, -4, -4, -4, -3, -3, -2, -2, -1, -0, 1, 2, 4, 5, 8, 10, 12, 14, 16, 17, 17, 13, 18, 27, 38, 44, 44, 45, 41, 38, 30, 22, 22, 22, 21, 16, 13, 10, 6, 2, -1, -3, -6, -8, -9, -13, -13, -11, -12, -12, -11, -11, -10, -10, -9, -8, -6, -11, -7, -9, -8, -7, -6, -6, -6, -6, -7, -7, -7, -7, -6, -5, -3, -1, -0, 2, 3, 5, 6, 7, 8, 10, 10, 11, 12, 12, 13, 13, 13, 13, 13, 14, 15, 15, 16, 16, 16, 16, 16, 16, 17, 18, 17, 17, 18, 20, 22, 25, 26, 24, 21, 20, 19, 18, 17, 14, 12, 11, 10, 9, 8, 4, 3, 2, 3, 4, 2, -4, -8, -10, -10, -9, -11, -13, -14, -15, -14, -14, -11, -10, -7, -5, -5, -7, -13, -15, -16, -16, -16, -16, -16, -17, -17, -16, -16, -16, -17, -18, -19, -20, -21, -22, -24, -26, -29, -31, -33, -36, -38, -40, -41, -42, -44, -45, -47, -49, -50, -52, -53, -52, -54, -52, -48, -53, -53, -52, -52, -51, -50, -51, -49, -48, -47, -45, -44, -43, -41, -39, -36, -34, -32, -30, -27, -25, -22, -19, -17, -14, -12, -10, -7, -5, 0, 6, 8, 12, 14, 17, 20, 22, 24, 27, 28, 29, 32, 32, 33, 35, 37, 39, 41, 44, 45, 48, 50, 50, 51, 54, 57, 60, 60, 59, 58, 59, 60, 60, 60, 59, 59, 60, 60, 59, 57, 59, 58, 58, 59, 61, 60, 60, 60, 57, 58, 65, 67, 66, 65, 64, 63, 61, 59, 57, 56, 53, 50,
- /* -17.0 */ 51, 50, 49, 48, 47, 46, 45, 36, 24, 28, 27, 24, 20, 17, 16, 14, 12, 12, 11, 10, 9, 8, 7, 7, 6, 6, 5, 4, 5, 5, 3, 1, -1, -3, -2, -3, -3, -4, -6, -7, -7, -8, -9, -10, -11, -11, -11, -11, -11, -11, -10, -10, -10, -9, -9, -8, -8, -7, -7, -6, -6, -5, -4, -4, -3, -3, -3, -2, -2, -2, -2, -3, -3, -3, -3, -3, -4, -4, -5, -5, -6, -6, -6, -6, -6, -6, -6, -5, -5, -5, -4, -4, -3, -3, -2, -1, -0, 1, 3, 5, 7, 10, 13, 15, 16, 14, 12, 19, 30, 39, 45, 45, 44, 43, 36, 25, 21, 23, 22, 22, 19, 14, 10, 7, 4, 1, -1, -3, -4, -7, -9, -12, -12, -13, -15, -15, -12, -12, -11, -10, -9, -8, -12, -10, -10, -9, -8, -8, -7, -7, -6, -7, -7, -8, -8, -7, -6, -4, -2, -1, 0, 2, 4, 5, 6, 7, 9, 9, 10, 11, 11, 12, 12, 13, 13, 13, 13, 13, 14, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 17, 18, 21, 22, 23, 24, 22, 21, 19, 18, 17, 15, 13, 11, 10, 9, 7, 7, 7, -0, -1, 1, 1, -3, -9, -11, -11, -11, -12, -13, -13, -15, -18, -17, -16, -14, -12, -13, -11, -8, -9, -13, -17, -17, -18, -18, -17, -17, -19, -19, -17, -17, -20, -21, -22, -23, -24, -24, -26, -28, -30, -33, -35, -38, -40, -42, -44, -45, -46, -47, -49, -50, -52, -54, -55, -56, -57, -56, -54, -51, -55, -54, -54, -53, -52, -49, -51, -49, -48, -46, -44, -42, -42, -40, -37, -35, -33, -31, -28, -25, -22, -20, -17, -14, -10, -9, -6, -6, -4, -0, 7, 12, 16, 19, 22, 24, 26, 29, 31, 33, 31, 33, 35, 36, 38, 39, 43, 45, 45, 48, 50, 52, 52, 54, 57, 59, 61, 62, 59, 60, 61, 63, 63, 63, 61, 61, 61, 61, 60, 60, 60, 59, 58, 60, 59, 60, 60, 60, 58, 62, 66, 66, 66, 65, 63, 62, 61, 59, 58, 55, 54, 51,
- /* -16.0 */ 52, 49, 48, 46, 45, 44, 42, 34, 22, 28, 26, 23, 20, 17, 16, 14, 12, 12, 11, 10, 9, 8, 7, 7, 7, 6, 6, 5, 5, 4, 2, 1, -1, 1, -0, -2, -4, -5, -5, -5, -6, -8, -9, -10, -10, -11, -11, -11, -10, -10, -10, -10, -9, -9, -9, -8, -8, -8, -7, -7, -6, -6, -5, -4, -4, -3, -3, -3, -3, -3, -3, -3, -3, -3, -4, -5, -5, -5, -5, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -5, -4, -4, -3, -3, -2, -1, 0, 2, 5, 7, 10, 13, 15, 13, 15, 30, 38, 42, 45, 45, 46, 41, 32, 25, 22, 22, 24, 22, 21, 17, 13, 9, 5, 2, -0, -2, -4, -5, -6, -8, -11, -13, -13, -14, -14, -13, -12, -11, -9, -9, -8, -9, -14, -11, -9, -8, -8, -8, -7, -7, -7, -7, -7, -7, -7, -6, -4, -3, -2, -0, 2, 3, 5, 6, 7, 8, 9, 10, 10, 11, 11, 12, 13, 14, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 16, 20, 23, 24, 24, 22, 20, 18, 17, 16, 14, 12, 10, 8, 7, 7, 5, 3, 2, -3, -5, -9, -8, -10, -12, -11, -10, -14, -15, -16, -15, -22, -20, -21, -19, -18, -18, -17, -13, -10, -14, -18, -19, -20, -20, -19, -20, -21, -22, -20, -19, -21, -25, -26, -27, -27, -28, -29, -32, -34, -37, -40, -42, -45, -46, -48, -50, -50, -51, -52, -54, -55, -57, -58, -59, -59, -58, -57, -54, -57, -56, -56, -54, -53, -52, -50, -49, -46, -45, -43, -40, -40, -37, -35, -33, -31, -28, -25, -22, -19, -18, -15, -11, -9, -8, -6, -3, -1, 2, 8, 14, 20, 22, 25, 27, 29, 33, 34, 35, 34, 35, 37, 39, 41, 43, 45, 47, 49, 50, 51, 52, 54, 56, 59, 62, 63, 62, 61, 63, 63, 64, 64, 63, 61, 61, 61, 62, 63, 62, 62, 61, 61, 60, 60, 59, 61, 60, 62, 64, 66, 66, 65, 64, 62, 61, 59, 58, 56, 54, 53, 52,
- /* -15.0 */ 49, 48, 46, 45, 44, 42, 38, 27, 27, 29, 26, 23, 20, 17, 15, 14, 13, 12, 11, 10, 9, 8, 7, 7, 6, 6, 6, 5, 3, 2, 1, 1, 2, 0, -2, -3, -4, -5, -5, -6, -7, -8, -9, -10, -10, -10, -10, -10, -10, -10, -10, -9, -9, -9, -9, -9, -8, -8, -7, -7, -7, -6, -6, -5, -4, -4, -4, -3, -3, -3, -3, -3, -4, -4, -5, -5, -6, -6, -6, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -6, -6, -5, -5, -4, -4, -3, -2, -0, 2, 4, 7, 10, 12, 11, 15, 30, 38, 44, 46, 47, 47, 45, 33, 27, 27, 26, 25, 22, 20, 19, 16, 13, 8, 3, -0, -2, -4, -5, -6, -7, -9, -12, -14, -15, -14, -13, -13, -13, -11, -10, -11, -8, -13, -14, -12, -11, -9, -8, -8, -7, -7, -7, -7, -7, -7, -6, -5, -4, -3, -2, -0, 1, 3, 5, 6, 7, 9, 10, 10, 10, 11, 12, 12, 12, 13, 13, 13, 13, 14, 13, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 16, 18, 21, 22, 24, 22, 20, 18, 16, 15, 13, 11, 9, 7, 5, 4, 3, 2, -0, -3, -8, -9, -10, -11, -10, -12, -14, -16, -18, -19, -20, -23, -21, -23, -24, -26, -23, -20, -18, -14, -15, -19, -22, -22, -23, -22, -22, -23, -24, -27, -24, -24, -28, -29, -30, -31, -32, -33, -36, -38, -41, -43, -46, -49, -51, -52, -53, -54, -55, -56, -57, -58, -59, -60, -61, -61, -58, -56, -56, -59, -58, -57, -55, -54, -53, -49, -48, -44, -43, -41, -40, -37, -34, -32, -31, -28, -25, -22, -18, -15, -14, -12, -8, -5, -3, -1, 1, 4, 6, 10, 15, 21, 26, 28, 30, 32, 35, 37, 37, 37, 39, 41, 43, 45, 47, 48, 51, 53, 52, 52, 54, 56, 58, 61, 64, 65, 63, 63, 64, 64, 63, 62, 61, 62, 62, 63, 63, 63, 64, 63, 64, 62, 61, 62, 63, 59, 54, 62, 64, 65, 65, 64, 63, 61, 59, 58, 56, 55, 53, 51, 49,
- /* -14.0 */ 47, 46, 44, 43, 38, 36, 32, 31, 33, 30, 29, 24, 19, 17, 16, 14, 13, 13, 12, 10, 9, 8, 7, 7, 6, 6, 5, 4, 3, 2, 3, 1, -1, -2, -3, -3, -4, -5, -6, -6, -7, -7, -8, -9, -9, -9, -10, -10, -10, -9, -10, -9, -9, -9, -9, -9, -9, -8, -8, -8, -7, -7, -6, -6, -5, -5, -4, -4, -4, -4, -4, -4, -4, -5, -5, -6, -6, -7, -8, -8, -8, -8, -8, -8, -8, -8, -8, -7, -7, -7, -6, -6, -5, -5, -4, -3, -2, -1, 1, 4, 6, 9, 9, 12, 24, 38, 37, 40, 45, 49, 44, 34, 31, 29, 29, 28, 25, 21, 19, 18, 15, 12, 10, 4, -2, -4, -6, -8, -9, -10, -10, -11, -15, -17, -14, -13, -13, -13, -14, -12, -10, -9, -12, -13, -12, -11, -10, -9, -8, -7, -7, -7, -7, -7, -7, -6, -5, -4, -3, -1, 0, 2, 4, 5, 6, 8, 9, 9, 10, 10, 11, 11, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 13, 13, 13, 13, 14, 15, 15, 16, 17, 19, 21, 22, 22, 21, 18, 16, 14, 12, 9, 6, 5, 4, 3, 1, -0, -2, -5, -7, -11, -11, -12, -11, -16, -17, -19, -20, -20, -22, -24, -23, -25, -26, -27, -25, -24, -18, -16, -16, -22, -24, -24, -25, -25, -25, -26, -27, -29, -29, -27, -31, -32, -34, -35, -36, -37, -40, -42, -45, -47, -50, -53, -55, -56, -58, -59, -60, -60, -61, -62, -62, -62, -64, -64, -63, -61, -60, -60, -59, -59, -56, -55, -53, -50, -46, -42, -41, -40, -38, -35, -30, -28, -27, -25, -21, -17, -14, -9, -10, -8, -4, -1, 1, 3, 6, 8, 10, 14, 19, 22, 27, 29, 32, 34, 36, 38, 39, 42, 42, 45, 48, 50, 51, 52, 54, 55, 55, 55, 57, 59, 62, 64, 66, 65, 64, 65, 64, 62, 62, 63, 63, 63, 64, 65, 66, 65, 64, 64, 65, 64, 64, 63, 62, 62, 52, 57, 65, 64, 64, 63, 61, 59, 58, 56, 54, 53, 51, 50, 47,
- /* -13.0 */ 41, 44, 41, 36, 36, 34, 32, 29, 28, 25, 24, 21, 19, 17, 15, 14, 13, 14, 13, 12, 10, 9, 8, 7, 7, 6, 4, 4, 3, 2, 1, 0, -0, -1, -3, -3, -4, -4, -5, -5, -6, -6, -7, -8, -8, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -8, -8, -8, -8, -7, -7, -6, -6, -5, -5, -5, -5, -5, -5, -5, -5, -6, -7, -7, -8, -9, -9, -9, -9, -9, -9, -9, -9, -8, -8, -8, -7, -7, -6, -6, -5, -4, -4, -2, -1, 1, 4, 6, 6, 7, 17, 32, 36, 34, 36, 41, 37, 31, 30, 31, 31, 29, 27, 24, 21, 19, 17, 13, 12, 11, 5, -2, -5, -8, -8, -8, -11, -12, -12, -16, -18, -14, -13, -14, -16, -13, -12, -11, -11, -11, -12, -13, -12, -10, -9, -8, -8, -8, -8, -8, -7, -7, -6, -5, -4, -3, -1, 1, 2, 4, 5, 7, 9, 9, 9, 10, 10, 10, 11, 12, 12, 14, 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 14, 15, 16, 17, 18, 22, 21, 22, 22, 18, 15, 13, 11, 8, 5, 4, 2, 1, 0, -2, -5, -5, -6, -10, -14, -12, -15, -19, -17, -21, -22, -21, -22, -25, -27, -28, -27, -22, -27, -27, -21, -18, -21, -26, -26, -27, -28, -27, -28, -29, -30, -32, -34, -31, -34, -36, -37, -38, -39, -42, -44, -46, -49, -51, -54, -57, -59, -60, -62, -64, -64, -64, -64, -65, -65, -65, -66, -67, -65, -66, -63, -60, -61, -59, -57, -56, -53, -48, -43, -42, -40, -38, -37, -31, -26, -24, -22, -19, -17, -13, -10, -6, -4, -3, 1, 3, 5, 7, 11, 12, 15, 18, 23, 26, 29, 32, 35, 36, 37, 39, 42, 44, 46, 49, 52, 54, 55, 56, 57, 58, 58, 59, 60, 61, 64, 67, 65, 64, 66, 65, 65, 65, 64, 64, 64, 64, 65, 67, 68, 68, 66, 66, 64, 65, 64, 63, 62, 59, 48, 59, 62, 62, 62, 60, 59, 57, 56, 54, 52, 50, 48, 46, 41,
- /* -12.0 */ 43, 41, 39, 35, 34, 31, 31, 27, 26, 25, 23, 20, 18, 17, 15, 15, 14, 14, 14, 13, 10, 9, 8, 7, 7, 6, 5, 4, 3, 3, 2, 1, 0, -0, -2, -2, -4, -4, -5, -5, -5, -5, -5, -6, -7, -8, -8, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -8, -8, -7, -7, -6, -6, -6, -6, -6, -6, -6, -6, -7, -8, -9, -9, -9, -10, -10, -10, -10, -10, -10, -10, -9, -9, -9, -8, -8, -7, -6, -5, -4, -3, -2, -1, 1, 3, 4, 2, 10, 24, 32, 33, 31, 31, 31, 28, 27, 29, 29, 30, 27, 23, 21, 19, 18, 15, 11, 9, 8, 2, -5, -8, -10, -9, -11, -14, -16, -14, -15, -17, -16, -16, -16, -16, -13, -12, -12, -12, -11, -12, -13, -12, -11, -9, -9, -9, -9, -9, -8, -8, -7, -6, -5, -4, -2, -0, 2, 3, 5, 6, 7, 9, 10, 10, 10, 10, 11, 11, 12, 12, 12, 13, 13, 12, 12, 11, 11, 11, 11, 11, 11, 12, 12, 13, 14, 15, 16, 17, 17, 19, 21, 22, 21, 19, 15, 12, 10, 7, 5, 3, 1, -0, -2, -3, -5, -7, -9, -10, -13, -13, -16, -19, -19, -23, -24, -24, -23, -26, -27, -26, -24, -27, -28, -29, -25, -24, -26, -29, -29, -30, -30, -30, -31, -32, -33, -35, -37, -34, -36, -39, -41, -42, -44, -46, -48, -51, -53, -55, -58, -61, -63, -64, -66, -68, -68, -68, -68, -68, -69, -68, -68, -69, -68, -67, -65, -62, -63, -59, -58, -56, -52, -48, -44, -39, -38, -36, -33, -28, -24, -21, -17, -14, -13, -9, -7, -3, 0, 3, 6, 7, 8, 10, 13, 15, 17, 21, 23, 25, 30, 35, 37, 38, 41, 43, 45, 46, 49, 52, 54, 56, 57, 59, 60, 61, 62, 62, 62, 63, 67, 69, 68, 67, 68, 67, 67, 65, 65, 66, 66, 66, 67, 65, 67, 68, 67, 63, 67, 64, 62, 61, 60, 56, 46, 58, 61, 60, 60, 58, 57, 53, 52, 50, 49, 46, 46, 42, 43,
- /* -11.0 */ 39, 38, 34, 33, 31, 29, 28, 27, 26, 24, 22, 20, 19, 17, 17, 15, 15, 15, 15, 12, 11, 9, 8, 8, 7, 6, 6, 5, 5, 4, 3, 3, 2, 1, -0, -2, -2, -3, -3, -4, -4, -4, -4, -5, -6, -7, -7, -8, -8, -9, -9, -9, -9, -10, -10, -10, -10, -10, -10, -10, -10, -10, -9, -9, -9, -8, -8, -7, -7, -7, -7, -7, -7, -7, -8, -9, -9, -10, -10, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -9, -9, -8, -7, -6, -5, -4, -2, -1, 1, 2, -0, 2, 15, 27, 32, 31, 29, 28, 26, 27, 28, 28, 27, 27, 24, 21, 19, 18, 15, 11, 7, 2, -2, -4, -9, -10, -10, -11, -12, -16, -19, -17, -16, -16, -16, -17, -17, -16, -16, -13, -12, -13, -12, -10, -10, -12, -11, -11, -10, -10, -9, -9, -8, -8, -7, -6, -5, -3, -1, 1, 2, 4, 6, 7, 8, 10, 11, 12, 11, 11, 11, 11, 12, 13, 13, 13, 13, 12, 12, 12, 11, 11, 11, 10, 10, 11, 11, 12, 13, 14, 14, 15, 17, 18, 18, 20, 19, 16, 13, 10, 8, 6, 4, 1, -1, -1, -3, -4, -6, -9, -10, -11, -12, -14, -15, -17, -18, -22, -25, -24, -24, -27, -27, -29, -29, -30, -31, -30, -31, -30, -30, -31, -30, -31, -32, -32, -33, -34, -36, -37, -38, -36, -38, -42, -45, -47, -48, -50, -52, -55, -57, -58, -62, -65, -67, -69, -70, -71, -72, -72, -72, -72, -72, -72, -70, -70, -70, -68, -67, -63, -65, -60, -57, -55, -52, -48, -44, -39, -37, -33, -29, -26, -23, -19, -14, -8, -8, -7, -5, -2, -0, 3, 5, 5, 4, 7, 11, 13, 16, 18, 23, 27, 29, 30, 31, 37, 42, 46, 48, 49, 52, 55, 57, 59, 59, 60, 62, 63, 64, 66, 66, 67, 69, 72, 72, 70, 70, 69, 68, 69, 72, 75, 74, 74, 72, 70, 65, 69, 68, 65, 64, 58, 62, 56, 55, 52, 54, 58, 59, 57, 56, 52, 51, 49, 46, 45, 43, 41, 40, 39, 39,
- /* -10.0 */ 35, 33, 31, 30, 29, 27, 27, 26, 25, 22, 21, 20, 18, 17, 16, 15, 16, 15, 14, 13, 11, 10, 8, 8, 7, 7, 7, 6, 6, 5, 5, 4, 2, 2, 0, -1, -1, -2, -2, -3, -3, 1, -2, -4, -5, -6, -7, -7, -8, -9, -9, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -9, -9, -8, -8, -8, -8, -8, -8, -9, -9, -10, -11, -11, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -10, -9, -8, -7, -6, -5, -4, -2, -1, 1, 0, -1, 9, 20, 24, 28, 27, 23, 26, 26, 27, 27, 26, 25, 23, 21, 18, 16, 14, 11, 7, 3, -1, -4, -4, -7, -10, -12, -12, -13, -15, -19, -19, -19, -19, -17, -16, -15, -17, -17, -14, -12, -12, -11, -9, -9, -12, -11, -11, -11, -10, -10, -9, -8, -7, -7, -6, -4, -3, -1, 2, 4, 5, 7, 8, 9, 10, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 11, 10, 10, 10, 10, 10, 10, 11, 11, 12, 13, 14, 15, 17, 17, 17, 16, 13, 11, 8, 6, 4, 2, -2, -4, -5, -5, -7, -6, -9, -13, -12, -11, -12, -17, -15, -19, -22, -23, -24, -27, -31, -30, -32, -32, -33, -33, -34, -33, -33, -32, -30, -32, -33, -33, -34, -35, -36, -38, -39, -38, -39, -42, -46, -49, -51, -52, -54, -56, -59, -61, -63, -65, -68, -71, -73, -74, -75, -76, -76, -76, -75, -75, -75, -74, -71, -70, -69, -68, -65, -65, -60, -58, -54, -52, -47, -43, -39, -35, -32, -27, -23, -21, -16, -11, -6, -5, -8, -7, -4, -2, 1, 5, 10, 10, 11, 14, 16, 19, 27, 36, 34, 27, 27, 33, 33, 36, 42, 47, 50, 52, 55, 58, 60, 61, 63, 65, 64, 66, 68, 69, 70, 72, 74, 74, 71, 69, 69, 75, 78, 78, 77, 74, 73, 73, 71, 70, 67, 66, 63, 63, 63, 58, 60, 60, 58, 58, 57, 56, 54, 51, 50, 47, 44, 43, 41, 39, 38, 36, 35, 35,
- /* -9.0 */ 32, 29, 29, 27, 26, 25, 24, 24, 23, 22, 20, 19, 17, 17, 16, 15, 15, 15, 13, 12, 11, 9, 12, 9, 8, 8, 8, 7, 7, 7, 5, 5, 3, 2, 1, 0, 0, -0, -1, -0, 2, -2, -3, -3, -4, -6, -7, -8, -8, -9, -10, -10, -10, -11, -11, -11, -11, -12, -12, -12, -13, -13, -12, -12, -12, -11, -11, -10, -10, -9, -9, -9, -9, -9, -10, -10, -11, -12, -12, -12, -13, -13, -13, -13, -12, -12, -12, -12, -11, -11, -10, -9, -8, -7, -5, -4, -2, -0, 0, -2, 6, 14, 19, 19, 18, 19, 21, 25, 25, 26, 26, 24, 23, 20, 17, 14, 12, 11, 8, 4, 1, -3, -5, -8, -10, -13, -15, -16, -16, -17, -21, -22, -21, -21, -20, -19, -18, -16, -14, -14, -12, -11, -9, -8, -7, -8, -11, -11, -11, -10, -10, -9, -8, -7, -6, -5, -4, -2, -0, 2, 4, 6, 8, 9, 10, 12, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 12, 10, 10, 9, 9, 9, 9, 9, 10, 10, 11, 11, 13, 16, 16, 15, 13, 10, 8, 6, 4, 2, -0, -3, -6, -8, -10, -9, -8, -12, -14, -13, -11, -12, -14, -13, -19, -21, -24, -25, -31, -33, -33, -34, -35, -35, -37, -34, -38, -35, -34, -34, -34, -36, -35, -36, -37, -38, -40, -41, -40, -44, -46, -49, -52, -54, -56, -58, -60, -63, -64, -66, -69, -72, -75, -76, -78, -79, -80, -80, -79, -78, -77, -77, -76, -74, -72, -70, -68, -65, -65, -60, -58, -55, -50, -46, -42, -37, -32, -30, -25, -21, -17, -13, -10, -9, -9, -6, -3, 1, 7, 11, 16, 21, 24, 27, 31, 35, 33, 36, 40, 37, 35, 32, 37, 42, 42, 37, 34, 41, 46, 52, 56, 60, 62, 65, 67, 66, 67, 69, 70, 71, 73, 75, 74, 74, 71, 77, 82, 78, 78, 78, 77, 74, 73, 71, 70, 69, 67, 63, 62, 62, 54, 60, 59, 56, 56, 54, 52, 49, 48, 45, 43, 42, 41, 39, 38, 36, 35, 33, 32,
- /* -8.0 */ 29, 27, 26, 25, 24, 22, 21, 21, 20, 20, 19, 18, 17, 17, 17, 16, 15, 15, 14, 12, 12, 10, 10, 10, 9, 9, 9, 9, 8, 8, 6, 5, 4, 3, 2, 2, 2, 1, 0, 3, 1, -1, -2, -3, -4, -5, -6, -8, -8, -9, -10, -10, -11, -12, -12, -12, -13, -13, -13, -14, -13, -13, -13, -13, -13, -13, -12, -12, -11, -11, -11, -10, -10, -10, -11, -11, -11, -12, -13, -13, -13, -13, -13, -13, -13, -13, -13, -12, -12, -11, -10, -9, -8, -7, -5, -4, -2, -0, -0, -2, 9, 15, 20, 13, 12, 15, 21, 23, 24, 26, 24, 22, 20, 18, 15, 11, 10, 8, 4, 1, -1, -4, -7, -10, -14, -16, -18, -19, -19, -20, -22, -23, -23, -23, -23, -23, -22, -19, -16, -13, -11, -10, -8, -6, -5, -5, -10, -11, -11, -11, -9, -8, -8, -7, -6, -5, -4, -2, 0, 2, 4, 6, 8, 10, 11, 12, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 13, 13, 10, 10, 9, 9, 8, 8, 8, 9, 9, 10, 11, 13, 13, 12, 10, 7, 6, 4, 1, -1, -3, -5, -7, -8, -12, -14, -11, -12, -11, -14, -14, -15, -17, -15, -17, -22, -25, -27, -29, -34, -35, -36, -37, -38, -40, -36, -40, -38, -36, -37, -36, -37, -38, -38, -39, -41, -42, -43, -44, -47, -50, -53, -55, -58, -60, -61, -63, -66, -69, -69, -72, -76, -79, -80, -82, -82, -83, -84, -83, -82, -81, -80, -79, -77, -75, -72, -70, -66, -65, -61, -58, -54, -50, -45, -42, -35, -30, -26, -23, -19, -15, -13, -12, -12, -7, 2, 12, 19, 24, 25, 27, 30, 33, 34, 33, 35, 37, 37, 38, 38, 41, 43, 45, 46, 48, 46, 42, 42, 46, 47, 51, 59, 63, 66, 67, 68, 69, 70, 71, 72, 74, 75, 75, 74, 75, 84, 75, 68, 72, 73, 69, 71, 69, 69, 68, 70, 65, 63, 61, 57, 59, 58, 56, 54, 51, 50, 49, 47, 44, 42, 41, 39, 39, 37, 36, 34, 33, 31, 29,
- /* -7.0 */ 27, 25, 24, 22, 21, 21, 20, 19, 20, 19, 18, 17, 17, 17, 17, 16, 15, 14, 14, 13, 12, 12, 11, 11, 11, 10, 10, 9, 9, 8, 7, 6, 5, 4, 4, 3, 3, 3, 2, 0, -0, -0, -1, -2, -4, -5, -6, -7, -8, -9, -10, -10, -11, -12, -12, -13, -13, -14, -14, -14, -15, -15, -15, -14, -14, -14, -14, -13, -13, -12, -12, -12, -12, -11, -12, -12, -12, -13, -13, -13, -13, -13, -13, -13, -14, -13, -13, -13, -12, -12, -11, -10, -8, -7, -5, -3, -2, -0, -2, 3, 9, 17, 19, 11, 12, 16, 20, 22, 23, 24, 23, 22, 19, 16, 13, 9, 7, 4, 1, -2, -4, -6, -9, -12, -16, -18, -20, -21, -21, -21, -22, -23, -24, -24, -25, -24, -23, -21, -18, -14, -11, -10, -9, -6, -4, -4, -9, -10, -9, -9, -8, -7, -7, -6, -5, -4, -2, -1, 1, 3, 5, 8, 9, 10, 12, 13, 14, 15, 16, 16, 16, 16, 16, 15, 15, 15, 16, 16, 16, 16, 15, 13, 11, 10, 9, 9, 8, 8, 7, 7, 8, 11, 13, 11, 10, 9, 7, 5, 3, 1, -2, -5, -7, -9, -10, -11, -13, -16, -15, -11, -11, -13, -14, -16, -16, -19, -20, -22, -25, -27, -30, -34, -36, -37, -38, -39, -40, -43, -43, -39, -39, -38, -38, -39, -39, -40, -42, -43, -44, -45, -49, -51, -53, -56, -58, -61, -63, -65, -66, -69, -73, -73, -74, -78, -82, -84, -85, -86, -86, -87, -86, -84, -82, -81, -81, -78, -76, -73, -70, -65, -64, -61, -58, -52, -48, -44, -40, -34, -29, -23, -18, -17, -15, -12, -9, -6, 8, 20, 22, 22, 24, 25, 28, 31, 34, 37, 39, 41, 43, 44, 44, 49, 48, 48, 49, 50, 50, 50, 50, 50, 45, 42, 46, 54, 63, 67, 68, 70, 70, 70, 72, 73, 75, 76, 77, 77, 78, 73, 60, 59, 65, 67, 70, 68, 60, 63, 70, 67, 62, 59, 56, 59, 58, 55, 53, 52, 50, 48, 46, 44, 42, 40, 39, 37, 37, 35, 32, 31, 30, 29, 27,
- /* -6.0 */ 26, 24, 22, 21, 20, 19, 19, 18, 19, 18, 17, 17, 17, 17, 17, 16, 16, 15, 15, 14, 13, 12, 12, 12, 12, 11, 11, 10, 10, 10, 9, 7, 7, 6, 5, 5, 4, 3, 3, 1, 1, 0, -1, -2, -4, -5, -6, -7, -8, -9, -10, -10, -11, -12, -13, -14, -14, -14, -15, -15, -15, -15, -16, -16, -15, -15, -15, -15, -14, -13, -13, -13, -13, -13, -13, -13, -13, -13, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -12, -12, -11, -9, -8, -6, -5, -3, -1, -0, -3, 8, 10, 17, 19, 14, 13, 15, 18, 20, 22, 23, 23, 21, 18, 14, 12, 8, 3, 1, -2, -5, -6, -9, -11, -14, -17, -19, -21, -21, -22, -22, -23, -24, -24, -26, -25, -24, -23, -22, -19, -15, -12, -11, -8, -7, -5, -5, -8, -8, -8, -8, -7, -6, -6, -5, -3, -2, -1, 1, 2, 4, 6, 8, 10, 12, 13, 14, 15, 16, 17, 18, 17, 17, 16, 16, 16, 16, 16, 17, 17, 17, 16, 15, 12, 11, 9, 9, 8, 7, 7, 7, 8, 9, 11, 7, 6, 5, 4, 1, -1, -4, -6, -8, -10, -13, -15, -15, -15, -16, -15, -13, -13, -13, -15, -18, -18, -20, -20, -19, -23, -28, -32, -34, -37, -39, -39, -40, -41, -42, -42, -42, -41, -40, -40, -39, -41, -42, -43, -44, -45, -49, -51, -54, -56, -59, -61, -64, -66, -68, -69, -72, -76, -77, -76, -80, -86, -87, -88, -89, -89, -90, -90, -89, -87, -86, -84, -81, -77, -75, -71, -66, -63, -61, -56, -51, -48, -44, -37, -31, -27, -21, -17, -17, -12, -10, -4, 8, 14, 19, 21, 24, 26, 28, 31, 34, 37, 40, 42, 44, 46, 47, 50, 49, 51, 52, 55, 55, 54, 54, 53, 53, 50, 35, 44, 53, 58, 66, 68, 70, 70, 70, 73, 75, 79, 81, 82, 81, 72, 71, 70, 75, 81, 75, 60, 57, 56, 71, 65, 63, 60, 60, 60, 58, 56, 54, 52, 49, 47, 45, 44, 42, 40, 39, 37, 36, 34, 33, 32, 31, 28, 27, 26,
- /* -5.0 */ 24, 23, 21, 20, 20, 19, 18, 18, 18, 17, 17, 17, 17, 17, 17, 17, 16, 16, 15, 14, 14, 13, 13, 13, 13, 12, 12, 12, 11, 11, 10, 9, 8, 8, 7, 6, 5, 4, 3, 2, 1, -0, -1, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -12, -13, -14, -14, -15, -15, -16, -16, -17, -17, -17, -17, -16, -16, -16, -16, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -12, -11, -10, -9, -8, -6, -4, -2, -0, 1, -2, 11, 17, 18, 11, 10, 11, 15, 19, 21, 21, 22, 20, 19, 15, 13, 10, 6, 0, -3, -4, -6, -8, -11, -13, -16, -18, -20, -21, -22, -22, -22, -24, -25, -25, -26, -26, -25, -23, -22, -19, -15, -12, -10, -8, -7, -6, -7, -8, -8, -7, -6, -5, -5, -4, -3, -2, -1, 0, 2, 3, 5, 7, 9, 11, 12, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 17, 17, 17, 17, 17, 17, 17, 16, 14, 12, 10, 9, 8, 8, 7, 7, 6, 6, 4, 4, 3, 2, 0, -2, -6, -8, -10, -12, -14, -15, -16, -17, -16, -16, -15, -13, -15, -15, -16, -19, -20, -19, -19, -18, -23, -27, -30, -34, -38, -40, -41, -42, -42, -43, -43, -43, -43, -42, -42, -41, -43, -41, -41, -44, -49, -51, -54, -56, -59, -61, -64, -66, -69, -71, -72, -75, -78, -81, -81, -84, -88, -90, -91, -91, -92, -93, -93, -92, -88, -87, -86, -83, -79, -76, -72, -67, -64, -60, -56, -50, -46, -42, -35, -30, -24, -19, -19, -15, -9, -4, 8, 13, 16, 20, 23, 26, 28, 30, 33, 36, 40, 43, 45, 47, 47, 50, 54, 54, 57, 57, 56, 56, 58, 58, 58, 56, 55, 43, 49, 59, 57, 68, 68, 70, 69, 72, 76, 81, 84, 81, 77, 70, 68, 74, 78, 80, 82, 80, 74, 58, 60, 64, 66, 66, 63, 61, 59, 57, 54, 52, 50, 47, 45, 43, 42, 41, 39, 37, 35, 34, 33, 31, 29, 28, 27, 26, 24,
- /* -4.0 */ 24, 22, 21, 20, 19, 19, 18, 18, 18, 18, 16, 17, 17, 16, 17, 17, 17, 16, 15, 14, 14, 14, 14, 14, 14, 14, 13, 12, 13, 12, 12, 11, 10, 9, 8, 7, 6, 4, 3, 2, 1, -0, -2, -3, -4, -5, -6, -7, -9, -9, -10, -11, -12, -13, -14, -15, -15, -16, -16, -17, -18, -18, -18, -18, -18, -18, -18, -17, -17, -16, -16, -16, -15, -15, -15, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -12, -11, -11, -9, -8, -7, -5, -3, -1, 1, 2, 0, 8, 16, 17, 13, 10, 12, 16, 20, 21, 21, 20, 18, 16, 13, 10, 8, 4, -2, -5, -6, -7, -8, -10, -12, -16, -20, -20, -20, -21, -22, -23, -24, -25, -25, -26, -27, -26, -23, -21, -19, -15, -13, -10, -8, -9, -8, -8, -7, -6, -6, -6, -4, -3, -3, -2, -1, 0, 1, 3, 5, 6, 7, 10, 11, 13, 14, 16, 17, 18, 19, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 17, 15, 14, 12, 11, 9, 8, 8, 5, 5, 5, 3, 3, 3, 1, -2, -6, -9, -10, -13, -14, -15, -17, -18, -18, -18, -16, -15, -12, -12, -15, -17, -19, -20, -19, -19, -18, -21, -24, -31, -33, -37, -40, -41, -43, -44, -44, -44, -44, -44, -44, -44, -44, -44, -42, -44, -49, -51, -54, -56, -59, -61, -64, -67, -69, -71, -73, -75, -77, -81, -84, -86, -87, -90, -92, -93, -94, -94, -95, -94, -94, -91, -87, -87, -85, -80, -76, -73, -66, -63, -60, -55, -49, -44, -39, -33, -28, -22, -19, -19, -10, -3, 7, 11, 14, 17, 21, 24, 27, 29, 32, 35, 39, 42, 44, 48, 50, 48, 51, 57, 57, 61, 59, 56, 58, 59, 59, 59, 59, 58, 57, 54, 65, 67, 70, 76, 81, 82, 81, 77, 79, 78, 77, 75, 75, 77, 79, 81, 81, 80, 78, 74, 66, 63, 63, 65, 64, 61, 59, 56, 54, 52, 50, 48, 45, 44, 43, 41, 40, 38, 35, 34, 32, 30, 29, 29, 27, 26, 25, 24,
- /* -3.0 */ 23, 21, 20, 20, 19, 19, 18, 18, 18, 17, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 14, 14, 15, 15, 14, 14, 14, 14, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 1, -0, -1, -3, -4, -5, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16, -17, -17, -18, -18, -19, -19, -19, -20, -19, -19, -19, -18, -18, -18, -17, -17, -16, -16, -16, -16, -15, -15, -15, -15, -14, -14, -14, -14, -13, -13, -12, -12, -11, -10, -8, -7, -6, -4, -3, -0, 2, 4, 3, 5, 10, 22, 16, 10, 14, 18, 20, 20, 19, 18, 17, 14, 10, 8, 6, 2, -2, -4, -7, -9, -12, -15, -15, -15, -18, -18, -19, -20, -22, -22, -24, -25, -26, -26, -27, -27, -24, -22, -20, -16, -13, -11, -11, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 4, 5, 6, 8, 10, 11, 13, 15, 16, 18, 19, 20, 19, 19, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18, 17, 15, 14, 13, 11, 10, 8, 8, 7, 4, 4, 5, 4, 2, -2, -8, -11, -13, -15, -15, -18, -20, -19, -19, -18, -16, -14, -9, -9, -13, -16, -18, -19, -18, -18, -16, -20, -25, -30, -31, -38, -40, -41, -43, -45, -45, -46, -46, -45, -45, -45, -46, -46, -47, -49, -51, -53, -55, -58, -61, -64, -66, -69, -71, -73, -75, -77, -80, -84, -87, -89, -90, -92, -95, -96, -97, -97, -98, -98, -96, -93, -88, -89, -87, -82, -77, -73, -67, -63, -59, -54, -48, -43, -37, -31, -27, -21, -23, -15, -10, 4, 8, 12, 15, 18, 22, 25, 28, 31, 34, 38, 41, 43, 45, 50, 53, 54, 56, 61, 61, 61, 58, 58, 60, 60, 59, 58, 60, 60, 59, 63, 69, 69, 69, 69, 77, 78, 76, 77, 78, 77, 78, 78, 79, 79, 80, 79, 78, 77, 76, 71, 67, 62, 63, 63, 61, 59, 56, 54, 52, 50, 48, 45, 44, 42, 40, 39, 38, 37, 34, 33, 32, 30, 27, 26, 26, 25, 24, 23,
- /* -2.0 */ 22, 21, 20, 19, 19, 19, 17, 17, 17, 16, 16, 16, 15, 15, 15, 15, 15, 15, 14, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 13, 12, 12, 11, 10, 9, 8, 6, 5, 4, 3, 1, -0, -2, -3, -4, -6, -7, -8, -9, -10, -11, -13, -14, -15, -16, -17, -18, -19, -19, -20, -20, -21, -21, -21, -21, -21, -20, -20, -19, -19, -18, -18, -17, -17, -17, -16, -16, -16, -15, -15, -14, -14, -13, -13, -13, -12, -11, -11, -10, -9, -8, -7, -5, -4, -2, 0, 3, 5, 6, 11, 18, 23, 23, 14, 16, 19, 20, 19, 17, 16, 15, 14, 10, 7, 5, 1, -2, -5, -7, -9, -12, -15, -16, -17, -19, -22, -22, -22, -23, -23, -24, -25, -25, -25, -26, -26, -22, -20, -19, -17, -16, -16, -13, -12, -11, -10, -8, -7, -6, -4, -4, -2, -1, 1, 2, 4, 5, 6, 8, 8, 10, 12, 13, 14, 15, 17, 18, 20, 20, 20, 20, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 17, 16, 15, 14, 12, 11, 10, 7, 5, 7, 7, 4, 2, -3, -7, -11, -15, -18, -20, -21, -21, -21, -20, -19, -17, -14, -7, -8, -12, -16, -18, -18, -17, -19, -15, -20, -25, -29, -31, -38, -41, -41, -44, -45, -47, -47, -47, -47, -46, -47, -48, -48, -49, -51, -53, -55, -57, -60, -63, -66, -69, -71, -72, -75, -77, -79, -83, -86, -89, -91, -92, -93, -97, -98, -99,-100,-101,-100, -98, -94, -92, -90, -87, -83, -78, -72, -68, -64, -59, -54, -47, -42, -36, -30, -26, -25, -17, -16, -3, 5, 8, 12, 15, 19, 22, 26, 29, 33, 36, 39, 42, 45, 48, 51, 53, 51, 57, 64, 64, 61, 61, 61, 62, 64, 62, 59, 64, 68, 69, 71, 71, 70, 72, 72, 74, 75, 74, 71, 71, 73, 76, 78, 78, 78, 78, 76, 74, 73, 70, 66, 63, 62, 62, 61, 60, 57, 54, 51, 49, 48, 46, 44, 42, 41, 40, 38, 37, 35, 33, 32, 30, 27, 28, 27, 25, 24, 23, 22,
- /* -1.0 */ 21, 20, 20, 19, 19, 17, 17, 17, 16, 16, 16, 15, 14, 16, 15, 14, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 15, 14, 14, 13, 12, 12, 11, 10, 9, 8, 7, 5, 4, 2, 1, -0, -2, -3, -5, -6, -7, -9, -10, -11, -12, -13, -15, -16, -17, -18, -19, -20, -21, -21, -22, -22, -22, -23, -22, -22, -22, -21, -21, -20, -19, -19, -18, -18, -17, -17, -17, -16, -16, -15, -14, -14, -13, -13, -12, -11, -11, -10, -10, -6, -4, -4, -3, -2, -1, 1, 4, 7, 9, 10, 16, 24, 23, 15, 17, 19, 20, 19, 17, 15, 14, 12, 8, 5, 2, -1, -3, -6, -8, -9, -12, -15, -18, -20, -21, -24, -24, -23, -24, -23, -25, -25, -25, -25, -24, -22, -22, -23, -22, -20, -18, -16, -14, -12, -10, -8, -6, -4, -2, -1, 1, 4, 5, 6, 6, 7, 7, 8, 8, 9, 10, 13, 15, 17, 18, 18, 19, 19, 20, 20, 20, 20, 20, 19, 19, 18, 18, 18, 18, 18, 18, 17, 18, 17, 17, 16, 16, 14, 14, 12, 9, 8, 8, 6, 4, 0, -4, -8, -13, -15, -19, -21, -21, -21, -21, -20, -18, -16, -12, -7, -8, -12, -14, -17, -17, -15, -15, -16, -20, -24, -28, -31, -34, -40, -42, -43, -45, -48, -49, -48, -49, -48, -48, -49, -50, -51, -53, -54, -56, -59, -62, -64, -67, -70, -72, -74, -77, -78, -81, -85, -88, -91, -94, -93, -95, -99, -99,-100,-101,-102,-101,-100, -97, -95, -92, -88, -84, -79, -74, -67, -62, -59, -54, -47, -41, -35, -29, -27, -23, -17, -12, -0, 3, 8, 11, 15, 19, 22, 26, 30, 34, 37, 41, 45, 48, 50, 54, 54, 54, 55, 62, 61, 64, 61, 50, 44, 45, 55, 68, 71, 72, 74, 77, 79, 78, 75, 75, 72, 70, 69, 72, 73, 73, 73, 73, 73, 73, 72, 71, 69, 64, 62, 60, 60, 59, 60, 59, 58, 56, 53, 50, 48, 46, 44, 42, 41, 39, 39, 37, 35, 33, 32, 31, 28, 28, 28, 26, 24, 24, 22, 21,
- /* 0.0 */ 21, 20, 20, 19, 19, 18, 17, 16, 15, 15, 15, 15, 15, 15, 14, 15, 16, 16, 16, 16, 16, 17, 16, 16, 17, 16, 15, 14, 14, 13, 13, 12, 11, 10, 9, 8, 6, 5, 3, 2, 1, -1, -2, -4, -6, -7, -8, -9, -11, -12, -13, -14, -16, -17, -18, -19, -20, -21, -22, -23, -23, -24, -24, -24, -24, -23, -23, -22, -22, -21, -20, -20, -19, -19, -18, -18, -17, -16, -16, -15, -14, -13, -13, -12, -11, -11, -10, -9, -8, -6, -4, -4, -3, -2, -0, 1, 3, 6, 10, 9, 14, 22, 25, 17, 18, 20, 21, 19, 19, 17, 14, 11, 7, 3, 0, -2, -5, -7, -8, -10, -13, -16, -19, -21, -23, -25, -26, -25, -24, -24, -26, -27, -26, -26, -25, -23, -25, -25, -23, -20, -19, -16, -14, -12, -10, -8, -7, -4, -2, 0, 2, 4, 6, 8, 9, 10, 10, 10, 11, 12, 13, 13, 15, 17, 18, 19, 19, 19, 19, 19, 19, 20, 19, 19, 19, 19, 18, 18, 17, 17, 17, 17, 17, 17, 17, 16, 17, 16, 14, 12, 9, 9, 8, 6, 3, -1, -4, -8, -11, -15, -17, -19, -20, -21, -21, -19, -17, -15, -12, -7, -10, -12, -12, -14, -16, -16, -14, -12, -19, -23, -27, -30, -33, -35, -41, -43, -45, -48, -49, -50, -49, -49, -49, -50, -51, -52, -53, -55, -58, -60, -63, -66, -68, -71, -73, -75, -78, -80, -83, -86, -89, -92, -95, -95, -96,-100,-101,-102,-103,-103,-103,-102, -99, -94, -93, -89, -84, -79, -74, -69, -63, -58, -53, -47, -40, -34, -30, -29, -19, -13, -7, -2, 2, 6, 10, 14, 18, 22, 26, 30, 34, 37, 41, 45, 50, 54, 55, 55, 53, 54, 58, 61, 63, 56, 55, 51, 47, 69, 72, 74, 77, 76, 73, 74, 73, 72, 68, 68, 70, 71, 72, 72, 72, 72, 71, 69, 68, 66, 66, 62, 63, 61, 59, 58, 59, 59, 59, 56, 54, 52, 49, 47, 45, 44, 42, 41, 39, 38, 36, 34, 32, 31, 29, 28, 28, 25, 25, 23, 23, 22, 21,
- /* 1.0 */ 19, 20, 19, 19, 18, 17, 17, 16, 15, 15, 15, 14, 14, 14, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 16, 16, 15, 15, 14, 13, 12, 11, 11, 10, 8, 7, 6, 5, 3, 1, -0, -2, -4, -5, -7, -8, -9, -11, -12, -13, -15, -16, -17, -18, -19, -21, -22, -23, -24, -24, -25, -25, -25, -25, -25, -25, -24, -24, -23, -22, -21, -21, -20, -19, -19, -18, -17, -17, -16, -15, -14, -13, -13, -12, -11, -10, -9, -7, -6, -5, -4, -3, -2, -1, 1, 2, 3, 6, 8, 10, 12, 18, 28, 24, 19, 20, 22, 21, 20, 17, 14, 10, 6, 2, 1, -1, -6, -8, -9, -11, -14, -17, -20, -23, -25, -26, -28, -28, -27, -26, -27, -28, -27, -26, -26, -28, -27, -25, -22, -20, -18, -15, -13, -11, -8, -6, -4, -1, 1, 4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 13, 12, 12, 15, 16, 17, 17, 17, 18, 19, 19, 20, 20, 19, 19, 18, 18, 18, 18, 17, 17, 17, 16, 16, 16, 16, 15, 16, 14, 13, 11, 11, 9, 7, 4, -0, -3, -6, -10, -13, -15, -18, -19, -19, -19, -18, -16, -14, -13, -11, -12, -13, -14, -14, -16, -12, -16, -14, -19, -24, -26, -29, -31, -33, -36, -42, -44, -47, -50, -51, -49, -50, -50, -51, -52, -53, -54, -56, -58, -61, -64, -66, -68, -71, -73, -76, -78, -81, -84, -88, -91, -94, -96, -96, -97,-100,-102,-103,-103,-103,-103,-102,-100, -96, -95, -91, -86, -80, -74, -68, -61, -58, -52, -47, -40, -35, -32, -26, -19, -12, -7, -3, 1, 4, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 50, 55, 58, 58, 58, 56, 56, 64, 65, 63, 67, 68, 58, 65, 71, 72, 73, 74, 74, 74, 73, 71, 71, 71, 71, 71, 71, 71, 71, 70, 69, 68, 67, 66, 66, 62, 62, 59, 58, 57, 57, 57, 57, 55, 53, 50, 48, 46, 45, 43, 42, 40, 39, 37, 35, 33, 31, 31, 28, 29, 26, 26, 24, 23, 21, 20, 19,
- /* 2.0 */ 19, 19, 19, 18, 18, 17, 16, 15, 15, 14, 14, 14, 14, 14, 14, 15, 15, 16, 15, 16, 17, 17, 18, 18, 16, 15, 14, 14, 14, 13, 12, 11, 10, 9, 7, 6, 5, 4, 2, 0, -1, -3, -4, -6, -8, -9, -11, -12, -13, -14, -16, -17, -18, -20, -21, -22, -23, -24, -25, -26, -26, -27, -27, -27, -26, -26, -25, -25, -24, -23, -23, -22, -21, -20, -19, -18, -18, -17, -16, -15, -14, -13, -12, -10, -10, -9, -7, -6, -5, -4, -3, -2, -1, 0, 1, 3, 5, 7, 9, 11, 11, 13, 20, 26, 24, 20, 20, 20, 18, 14, 11, 8, 4, -0, -1, -4, -6, -9, -10, -12, -16, -19, -22, -24, -26, -28, -29, -29, -29, -28, -29, -29, -28, -30, -32, -29, -27, -24, -22, -20, -17, -15, -13, -10, -8, -5, -2, 0, 3, 5, 7, 7, 8, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 14, 14, 15, 16, 18, 20, 20, 20, 19, 18, 18, 18, 19, 19, 18, 17, 17, 17, 17, 16, 16, 16, 15, 15, 16, 14, 13, 13, 12, 9, 7, 4, 0, -1, -3, -7, -10, -14, -16, -18, -16, -16, -15, -14, -13, -13, -11, -11, -13, -14, -14, -16, -15, -17, -16, -20, -23, -25, -28, -30, -30, -33, -36, -40, -46, -50, -51, -50, -50, -51, -52, -53, -54, -55, -56, -58, -61, -63, -66, -68, -71, -74, -76, -79, -81, -85, -89, -92, -95, -97, -97, -99,-100,-102,-104,-104,-104,-104,-103,-102, -99, -95, -90, -85, -80, -73, -66, -61, -56, -51, -47, -43, -39, -32, -27, -21, -10, -7, -4, -0, 4, 8, 12, 15, 20, 23, 26, 30, 34, 38, 41, 45, 53, 56, 58, 57, 54, 54, 59, 59, 60, 64, 70, 62, 56, 68, 69, 72, 74, 74, 74, 73, 72, 71, 70, 70, 70, 69, 70, 69, 68, 67, 66, 66, 65, 64, 62, 60, 57, 56, 56, 56, 56, 55, 54, 52, 50, 47, 46, 44, 42, 40, 39, 38, 36, 34, 32, 31, 30, 27, 28, 26, 25, 23, 21, 21, 20, 19,
- /* 3.0 */ 19, 18, 18, 17, 17, 16, 16, 15, 14, 14, 14, 14, 14, 14, 14, 15, 15, 16, 16, 17, 17, 18, 17, 17, 16, 15, 14, 14, 12, 11, 10, 10, 9, 8, 7, 5, 4, 3, 1, -0, -2, -3, -5, -7, -9, -10, -11, -13, -14, -16, -17, -18, -20, -21, -22, -23, -25, -25, -26, -27, -28, -28, -28, -28, -28, -27, -26, -26, -25, -24, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -12, -11, -10, -9, -8, -7, -5, -4, -3, -2, -1, 0, 1, 2, 4, 5, 7, 10, 12, 13, 11, 15, 24, 27, 18, 18, 16, 12, 9, 6, 3, 1, -3, -6, -7, -6, -10, -13, -14, -17, -20, -23, -26, -28, -29, -30, -30, -30, -31, -31, -29, -29, -31, -31, -29, -27, -25, -23, -21, -18, -15, -12, -10, -7, -4, -2, 1, 4, 5, 6, 8, 8, 9, 10, 11, 11, 12, 13, 13, 15, 15, 15, 16, 17, 18, 18, 19, 20, 21, 20, 21, 20, 20, 20, 19, 18, 18, 18, 17, 17, 17, 16, 15, 14, 16, 17, 17, 16, 15, 15, 13, 11, 8, 6, 3, 1, -0, -3, -7, -10, -13, -14, -13, -12, -12, -11, -12, -12, -11, -11, -13, -14, -13, -13, -15, -17, -18, -20, -21, -24, -27, -29, -30, -31, -35, -37, -41, -47, -50, -50, -52, -51, -53, -53, -54, -56, -57, -59, -61, -63, -66, -68, -71, -73, -76, -79, -82, -86, -90, -93, -95, -98, -96, -99,-101,-103,-104,-103,-104,-104,-104,-102, -99, -95, -91, -85, -80, -74, -67, -60, -55, -51, -49, -44, -37, -31, -29, -19, -12, -9, -5, -1, 2, 5, 9, 13, 18, 21, 24, 28, 31, 35, 40, 45, 50, 54, 57, 55, 55, 57, 59, 62, 65, 68, 70, 67, 56, 62, 67, 73, 73, 74, 73, 72, 71, 70, 69, 69, 69, 68, 68, 68, 67, 66, 65, 64, 64, 63, 61, 57, 56, 54, 54, 55, 55, 54, 53, 50, 49, 47, 46, 43, 41, 40, 38, 36, 34, 32, 30, 30, 29, 26, 28, 25, 24, 22, 21, 20, 19, 19,
- /* 4.0 */ 17, 17, 16, 16, 17, 16, 15, 14, 14, 14, 13, 13, 14, 13, 14, 14, 15, 16, 17, 16, 17, 17, 17, 16, 15, 15, 14, 13, 12, 11, 10, 9, 7, 6, 5, 4, 3, 2, 0, -1, -3, -4, -6, -8, -10, -12, -13, -15, -16, -17, -19, -20, -21, -22, -23, -25, -26, -27, -28, -28, -29, -29, -29, -29, -29, -29, -28, -27, -27, -26, -25, -24, -23, -21, -20, -19, -18, -17, -16, -14, -13, -12, -11, -10, -9, -8, -7, -5, -4, -3, -2, -0, 1, 3, 4, 5, 7, 9, 10, 13, 14, 13, 10, 17, 27, 18, 19, 10, 6, 4, 2, -1, -3, -6, -7, -8, -9, -12, -14, -15, -18, -22, -24, -27, -31, -33, -33, -32, -33, -34, -32, -29, -30, -31, -32, -30, -28, -26, -23, -21, -18, -15, -13, -10, -7, -4, -1, 2, 4, 5, 6, 8, 9, 10, 10, 12, 12, 13, 14, 15, 16, 16, 17, 17, 18, 19, 19, 20, 21, 22, 22, 24, 25, 24, 23, 22, 21, 20, 20, 19, 18, 17, 16, 15, 17, 19, 21, 19, 18, 20, 16, 15, 14, 12, 10, 8, 5, 3, -3, -6, -8, -9, -10, -11, -11, -11, -11, -11, -11, -11, -12, -13, -13, -12, -11, -14, -16, -17, -16, -18, -22, -26, -30, -30, -31, -34, -37, -39, -43, -47, -49, -53, -54, -52, -53, -54, -55, -57, -59, -61, -63, -65, -67, -70, -73, -77, -80, -83, -87, -90, -93, -96, -98, -96,-100,-101,-103,-104,-104,-106,-106,-105,-103, -99, -95, -90, -86, -80, -73, -67, -60, -55, -51, -51, -44, -43, -33, -22, -20, -15, -11, -7, -2, 1, 3, 6, 10, 15, 19, 22, 25, 29, 33, 37, 42, 47, 52, 56, 55, 57, 59, 61, 63, 66, 68, 69, 70, 62, 65, 66, 71, 72, 72, 72, 71, 70, 69, 68, 67, 67, 67, 67, 67, 66, 65, 64, 63, 62, 62, 59, 57, 55, 53, 53, 54, 54, 52, 53, 49, 48, 47, 45, 41, 41, 38, 36, 34, 33, 31, 30, 28, 28, 25, 26, 24, 23, 21, 19, 19, 18, 17,
- /* 5.0 */ 16, 16, 16, 16, 16, 15, 13, 13, 13, 13, 12, 12, 13, 13, 14, 14, 15, 16, 16, 17, 16, 17, 16, 15, 15, 14, 13, 12, 11, 10, 9, 8, 6, 5, 4, 3, 1, -0, -1, -3, -4, -6, -8, -10, -12, -13, -15, -16, -17, -19, -20, -21, -23, -24, -25, -26, -27, -28, -29, -30, -30, -30, -31, -31, -31, -30, -29, -29, -28, -27, -26, -24, -23, -22, -21, -19, -18, -17, -15, -14, -13, -11, -10, -9, -8, -7, -6, -5, -4, -3, -1, 0, 2, 4, 6, 6, 8, 9, 10, 12, 13, 14, 12, 16, 27, 23, 22, 13, 3, -0, -2, -5, -6, -5, -8, -9, -10, -15, -13, -14, -19, -24, -25, -27, -33, -34, -33, -34, -34, -34, -36, -35, -35, -34, -33, -31, -29, -26, -24, -21, -18, -16, -13, -10, -7, -4, -1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 17, 17, 17, 18, 19, 20, 20, 21, 23, 23, 27, 30, 30, 29, 27, 26, 24, 25, 24, 22, 20, 20, 17, 16, 18, 21, 19, 19, 20, 21, 20, 18, 16, 14, 12, 9, 6, 4, -1, -5, -8, -8, -7, -9, -9, -10, -11, -12, -11, -11, -11, -12, -13, -13, -13, -13, -15, -14, -15, -17, -21, -24, -29, -30, -31, -34, -36, -39, -41, -46, -49, -53, -54, -54, -53, -54, -55, -56, -57, -60, -62, -64, -66, -70, -74, -78, -81, -84, -88, -91, -94, -96, -97, -96,-100,-101,-102,-103,-105,-107,-106,-105,-103, -99, -95, -90, -86, -80, -73, -67, -60, -54, -52, -50, -49, -42, -29, -26, -21, -17, -13, -8, -3, -1, 0, 3, 8, 12, 17, 20, 23, 27, 31, 34, 39, 44, 49, 54, 57, 59, 62, 62, 64, 66, 67, 64, 65, 53, 56, 68, 70, 69, 70, 71, 69, 68, 68, 67, 67, 66, 66, 65, 66, 65, 64, 63, 62, 61, 61, 59, 55, 54, 53, 52, 54, 52, 51, 51, 49, 47, 45, 43, 40, 40, 36, 34, 33, 30, 30, 29, 28, 27, 25, 24, 23, 22, 21, 18, 18, 17, 16,
- /* 6.0 */ 16, 16, 16, 16, 15, 13, 12, 11, 12, 12, 12, 12, 13, 13, 14, 14, 15, 15, 16, 17, 16, 16, 15, 14, 13, 13, 12, 11, 10, 8, 7, 6, 5, 4, 3, 1, 0, -1, -3, -5, -6, -8, -10, -11, -13, -15, -16, -18, -19, -20, -22, -23, -24, -25, -27, -28, -29, -30, -31, -31, -32, -32, -32, -32, -32, -31, -31, -30, -29, -28, -26, -25, -24, -23, -21, -20, -18, -17, -15, -14, -12, -11, -10, -9, -8, -6, -5, -4, -3, -2, -1, 1, 3, 4, 6, 8, 9, 10, 13, 13, 14, 14, 12, 19, 26, 20, 13, 20, 6, -3, -5, -7, -10, -8, -6, -7, -13, -17, -16, -19, -23, -26, -27, -28, -32, -32, -32, -33, -33, -36, -38, -38, -38, -36, -34, -32, -30, -27, -24, -22, -19, -16, -13, -10, -7, -4, -1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 18, 18, 19, 20, 21, 22, 23, 25, 28, 30, 31, 31, 29, 29, 27, 27, 28, 27, 27, 26, 25, 21, 19, 19, 20, 19, 20, 21, 22, 23, 20, 18, 15, 12, 10, 8, 5, 1, -3, -6, -6, -6, -7, -8, -9, -11, -11, -10, -10, -11, -12, -13, -13, -13, -13, -13, -13, -13, -14, -18, -23, -26, -29, -30, -32, -34, -37, -40, -42, -49, -52, -53, -55, -54, -54, -54, -55, -57, -58, -60, -62, -66, -70, -74, -78, -82, -85, -88, -91, -94, -96, -97, -97,-100,-101,-102,-102,-104,-105,-100, -98,-100, -98, -95, -90, -85, -79, -73, -67, -60, -55, -55, -54, -52, -40, -34, -30, -23, -19, -15, -10, -7, -5, -3, 0, 6, 10, 14, 17, 21, 24, 28, 31, 35, 42, 47, 53, 53, 56, 60, 67, 65, 66, 67, 70, 64, 45, 60, 68, 68, 67, 67, 69, 66, 66, 67, 66, 66, 65, 64, 64, 64, 64, 63, 63, 61, 60, 59, 58, 57, 53, 53, 52, 52, 50, 49, 50, 48, 45, 43, 41, 38, 36, 35, 32, 31, 29, 29, 28, 28, 25, 27, 24, 23, 21, 21, 18, 18, 16, 16,
- /* 7.0 */ 16, 15, 15, 15, 14, 11, 11, 11, 11, 11, 11, 12, 12, 13, 13, 14, 14, 14, 15, 15, 15, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 1, -0, -1, -3, -5, -6, -8, -10, -11, -13, -15, -16, -18, -20, -21, -23, -24, -25, -27, -28, -29, -30, -31, -32, -32, -33, -33, -34, -33, -34, -33, -33, -32, -31, -30, -29, -27, -26, -25, -23, -22, -20, -18, -16, -15, -13, -12, -10, -9, -8, -7, -6, -5, -3, -2, -1, 0, 1, 3, 5, 6, 8, 11, 11, 12, 12, 12, 12, 14, 17, 22, 14, 4, 11, 3, -5, -7, -8, -10, -12, -10, -12, -16, -21, -24, -26, -27, -29, -30, -31, -32, -33, -33, -34, -39, -40, -40, -40, -39, -38, -35, -32, -30, -28, -25, -22, -19, -16, -13, -10, -7, -4, -1, 1, 3, 4, 6, 7, 9, 10, 12, 13, 14, 15, 17, 17, 18, 19, 19, 20, 21, 22, 23, 27, 31, 31, 31, 32, 31, 30, 30, 28, 28, 28, 28, 27, 26, 27, 26, 25, 24, 23, 22, 22, 22, 21, 20, 20, 19, 17, 15, 12, 8, 6, 3, -0, -2, -3, -3, -5, -6, -9, -9, -8, -8, -10, -11, -11, -12, -13, -12, -12, -11, -11, -11, -11, -14, -19, -23, -25, -26, -28, -31, -33, -36, -39, -44, -51, -53, -54, -56, -54, -53, -54, -56, -57, -59, -62, -66, -70, -74, -78, -82, -85, -89, -91, -94, -96, -97, -97,-100,-100,-101,-101,-103,-103, -97, -93, -95, -96, -94, -90, -85, -79, -74, -67, -60, -56, -58, -59, -50, -42, -35, -31, -25, -21, -17, -14, -12, -9, -5, -2, 3, 7, 11, 15, 18, 22, 26, 31, 33, 36, 44, 48, 52, 53, 55, 59, 67, 66, 69, 71, 62, 51, 62, 67, 67, 66, 66, 67, 68, 63, 63, 61, 64, 64, 63, 63, 63, 63, 62, 61, 60, 59, 58, 58, 53, 52, 55, 52, 50, 50, 48, 46, 49, 43, 41, 39, 37, 35, 33, 32, 30, 28, 26, 27, 26, 26, 26, 23, 22, 21, 19, 18, 17, 16, 16,
- /* 8.0 */ 15, 14, 13, 13, 12, 10, 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 15, 14, 14, 13, 14, 13, 12, 11, 10, 9, 8, 7, 6, 6, 5, 4, 2, 1, -0, -1, -3, -4, -6, -8, -9, -11, -13, -14, -16, -18, -19, -22, -23, -25, -26, -27, -29, -30, -31, -32, -33, -34, -35, -35, -35, -35, -35, -35, -35, -34, -33, -32, -31, -29, -28, -27, -25, -23, -22, -20, -18, -16, -15, -13, -12, -10, -9, -8, -6, -5, -4, -3, -2, -0, 1, 2, 4, 5, 7, 9, 11, 12, 14, 15, 15, 15, 15, 12, 9, 4, 2, 4, 0, -5, -9, -10, -11, -13, -14, -18, -21, -25, -27, -29, -30, -31, -33, -35, -37, -38, -37, -39, -43, -43, -42, -42, -40, -37, -35, -32, -30, -28, -25, -21, -18, -15, -12, -10, -7, -5, -3, -2, -0, 2, 4, 6, 7, 9, 10, 12, 13, 15, 17, 19, 19, 19, 20, 21, 23, 24, 31, 33, 30, 32, 34, 35, 34, 31, 30, 29, 27, 28, 27, 26, 26, 26, 26, 26, 25, 25, 24, 24, 22, 21, 20, 19, 18, 16, 14, 12, 9, 6, 4, 2, -1, -1, -2, -3, -5, -5, -6, -7, -7, -9, -10, -10, -11, -12, -12, -10, -8, -8, -9, -11, -12, -16, -19, -21, -22, -25, -28, -29, -31, -34, -39, -47, -52, -53, -54, -55, -52, -53, -54, -55, -58, -62, -66, -70, -74, -78, -81, -85, -88, -91, -93, -95, -96, -97, -99,-100,-100, -97, -99,-100, -96, -94, -95, -95, -92, -88, -84, -78, -73, -67, -62, -58, -58, -60, -49, -43, -36, -32, -27, -23, -19, -17, -14, -11, -7, -3, -0, 4, 8, 13, 16, 20, 25, 29, 33, 36, 38, 46, 50, 52, 54, 56, 60, 67, 71, 71, 65, 55, 61, 65, 64, 64, 64, 64, 64, 63, 63, 65, 58, 63, 63, 62, 61, 62, 59, 60, 60, 59, 59, 58, 52, 50, 52, 49, 48, 49, 46, 44, 42, 41, 39, 37, 35, 33, 31, 30, 29, 28, 28, 27, 25, 26, 23, 22, 22, 20, 19, 18, 16, 16, 15,
- /* 9.0 */ 14, 13, 13, 12, 11, 10, 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 13, 14, 13, 13, 12, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, -0, -1, -3, -4, -6, -7, -9, -11, -12, -14, -15, -17, -19, -21, -23, -25, -26, -28, -29, -31, -32, -33, -34, -35, -36, -37, -37, -37, -37, -37, -37, -36, -35, -34, -33, -32, -30, -29, -27, -25, -23, -22, -20, -18, -16, -15, -13, -12, -10, -9, -8, -6, -5, -3, -2, -1, 0, 1, 3, 4, 6, 6, 7, 10, 15, 13, 11, 12, 14, 10, 1, 2, -2, -2, -2, -11, -5, -8, -12, -13, -15, -18, -23, -29, -33, -35, -34, -33, -36, -40, -40, -42, -44, -42, -44, -44, -43, -42, -41, -39, -37, -35, -33, -30, -26, -23, -20, -16, -14, -12, -10, -8, -6, -4, -3, -1, 1, 3, 5, 7, 8, 10, 12, 13, 15, 16, 19, 20, 19, 21, 23, 25, 29, 32, 32, 30, 33, 34, 35, 34, 31, 29, 28, 27, 27, 26, 25, 24, 24, 25, 25, 24, 24, 25, 25, 23, 23, 21, 19, 19, 16, 14, 12, 9, 6, 4, 1, -1, -1, -1, -1, -2, -3, -4, -5, -6, -7, -8, -8, -9, -10, -8, -4, -7, -7, -7, -8, -12, -12, -14, -17, -18, -22, -25, -27, -28, -30, -34, -42, -49, -51, -52, -53, -51, -51, -53, -55, -58, -62, -66, -70, -74, -77, -80, -84, -87, -90, -92, -94, -95, -96, -98, -99, -96, -96, -97, -97, -96, -95, -98, -95, -92, -88, -84, -78, -73, -67, -62, -61, -59, -61, -51, -44, -39, -34, -29, -25, -22, -20, -17, -13, -9, -6, -3, 2, 6, 10, 13, 18, 23, 26, 31, 35, 38, 42, 49, 49, 54, 55, 53, 60, 64, 68, 68, 51, 60, 62, 62, 61, 61, 62, 61, 62, 62, 62, 59, 61, 60, 61, 60, 57, 55, 56, 56, 54, 54, 51, 56, 47, 51, 46, 43, 43, 43, 42, 40, 38, 35, 35, 34, 32, 30, 29, 30, 29, 28, 25, 28, 26, 22, 22, 20, 19, 18, 18, 16, 15, 14,
- /* 10.0 */ 13, 12, 12, 11, 10, 10, 10, 10, 11, 12, 12, 12, 12, 13, 13, 15, 13, 13, 12, 11, 10, 10, 9, 8, 7, 6, 5, 5, 3, 2, 1, 0, -1, -2, -3, -4, -5, -7, -8, -10, -11, -13, -15, -17, -19, -21, -23, -24, -26, -28, -29, -31, -32, -34, -35, -36, -37, -38, -38, -39, -39, -39, -39, -39, -38, -37, -36, -34, -33, -31, -29, -27, -26, -24, -22, -20, -18, -16, -15, -13, -12, -10, -9, -7, -6, -5, -3, -2, -1, 0, 1, 3, 4, 4, 6, 10, 14, 9, 6, 3, 1, 1, -2, -4, -3, -5, -4, -1, -13, -14, -11, -13, -16, -17, -23, -28, -32, -40, -45, -43, -42, -41, -42, -44, -46, -45, -45, -45, -45, -44, -43, -41, -39, -37, -35, -32, -29, -26, -22, -19, -16, -15, -13, -11, -9, -7, -5, -3, -1, 1, 3, 5, 6, 8, 10, 11, 13, 14, 16, 16, 17, 19, 21, 25, 29, 30, 31, 33, 32, 33, 33, 32, 32, 30, 28, 28, 27, 26, 25, 24, 23, 22, 24, 24, 23, 23, 24, 25, 24, 24, 22, 19, 18, 17, 15, 13, 10, 8, 6, 4, 2, 0, -0, -0, -0, -1, -2, -3, -5, -6, -5, -6, -7, -8, -4, -4, -5, -6, -7, -8, -10, -12, -13, -15, -18, -20, -23, -25, -26, -28, -32, -37, -44, -48, -50, -51, -50, -50, -51, -54, -58, -62, -66, -70, -72, -76, -79, -83, -85, -88, -91, -93, -94, -95, -97, -97, -95, -95, -95, -95, -96, -98, -97, -95, -91, -88, -84, -79, -74, -68, -63, -63, -61, -64, -53, -46, -42, -36, -32, -28, -25, -23, -19, -16, -12, -9, -5, -1, 3, 8, 11, 15, 19, 24, 29, 32, 37, 40, 45, 50, 52, 56, 54, 62, 65, 65, 64, 50, 59, 60, 59, 59, 58, 58, 59, 60, 60, 60, 60, 55, 61, 56, 54, 52, 53, 55, 53, 51, 51, 46, 45, 44, 44, 42, 41, 41, 40, 39, 38, 36, 35, 36, 33, 32, 30, 28, 28, 26, 25, 26, 25, 23, 22, 21, 20, 19, 18, 16, 15, 14, 13,
- /* 11.0 */ 12, 11, 11, 11, 11, 11, 11, 10, 11, 10, 12, 12, 12, 13, 13, 13, 13, 12, 11, 10, 9, 8, 8, 6, 6, 5, 4, 3, 2, 0, -1, -1, -2, -3, -4, -5, -6, -8, -9, -11, -12, -15, -16, -18, -20, -22, -24, -26, -28, -29, -31, -32, -34, -35, -37, -38, -39, -40, -40, -41, -41, -41, -41, -40, -39, -38, -37, -35, -34, -32, -30, -28, -26, -24, -22, -20, -18, -16, -14, -13, -11, -10, -9, -7, -6, -5, -3, -2, -0, 1, 2, 3, 1, -1, 6, 8, 9, 6, 3, 1, -1, -2, -4, -6, -9, -9, 0, -5, -13, -17, -17, -17, -22, -23, -26, -30, -30, -33, -39, -42, -46, -45, -45, -47, -47, -46, -45, -45, -45, -44, -43, -41, -39, -37, -35, -31, -27, -25, -22, -20, -18, -17, -15, -13, -11, -8, -6, -4, -2, 0, 2, 4, 7, 9, 10, 12, 14, 15, 16, 16, 17, 19, 20, 26, 28, 29, 31, 32, 35, 34, 32, 32, 31, 29, 29, 29, 28, 26, 25, 24, 23, 23, 22, 23, 22, 21, 22, 22, 22, 22, 21, 19, 18, 16, 15, 13, 11, 10, 8, 6, 4, 3, 3, 2, 2, 0, -1, -2, -3, -3, -2, -3, -5, -5, -4, -5, -5, -3, -6, -7, -9, -11, -12, -13, -17, -20, -21, -24, -25, -28, -28, -33, -40, -44, -47, -48, -48, -49, -52, -54, -58, -62, -65, -68, -71, -75, -78, -81, -84, -87, -90, -91, -92, -93, -95, -94, -92, -94, -94, -93, -93, -99, -96, -93, -90, -88, -84, -79, -74, -68, -64, -63, -61, -63, -53, -48, -44, -38, -34, -30, -28, -25, -22, -18, -15, -12, -8, -3, 1, 6, 9, 12, 16, 20, 25, 30, 35, 39, 42, 48, 52, 54, 55, 60, 62, 65, 55, 52, 57, 58, 57, 56, 56, 56, 56, 58, 58, 58, 59, 50, 51, 43, 38, 41, 46, 51, 50, 50, 47, 46, 44, 43, 42, 41, 40, 39, 37, 39, 36, 34, 34, 33, 32, 29, 29, 27, 27, 28, 26, 23, 25, 22, 21, 20, 19, 17, 16, 15, 14, 13, 12,
- /* 12.0 */ 11, 10, 11, 11, 11, 11, 10, 11, 11, 10, 11, 12, 12, 12, 12, 12, 11, 10, 10, 9, 8, 8, 6, 5, 5, 4, 3, 2, 0, -1, -2, -2, -3, -4, -5, -6, -8, -9, -10, -12, -13, -15, -18, -19, -21, -23, -25, -27, -29, -31, -32, -34, -35, -37, -38, -39, -40, -41, -42, -42, -42, -42, -42, -41, -40, -39, -38, -36, -35, -33, -31, -29, -27, -25, -22, -20, -18, -16, -14, -12, -10, -9, -8, -7, -6, -5, -3, -2, -1, -0, -2, -3, -2, -0, 6, 9, 7, 6, 3, 3, 0, -2, -4, -6, -10, -16, -20, -18, -16, -22, -23, -25, -26, -30, -34, -36, -32, -38, -38, -43, -49, -49, -45, -48, -47, -46, -45, -45, -44, -43, -42, -41, -38, -35, -32, -29, -26, -24, -22, -20, -19, -17, -15, -13, -11, -9, -6, -4, -2, 1, 3, 6, 8, 10, 12, 14, 15, 15, 16, 18, 19, 20, 21, 27, 28, 29, 30, 30, 33, 33, 33, 32, 31, 29, 29, 29, 28, 27, 26, 25, 24, 24, 22, 22, 20, 20, 21, 21, 22, 21, 21, 19, 17, 16, 14, 13, 12, 11, 8, 7, 5, 5, 5, 5, 4, 3, 1, -0, -0, -0, -1, -1, -3, -4, -5, -5, -4, -2, -2, -3, -8, -9, -10, -12, -15, -17, -19, -21, -23, -26, -28, -30, -34, -37, -41, -43, -45, -46, -51, -54, -57, -60, -63, -67, -70, -73, -76, -79, -82, -85, -88, -89, -90, -92, -93, -91, -90, -89, -91, -91, -93, -96, -95, -92, -89, -87, -83, -79, -74, -69, -64, -63, -62, -62, -54, -49, -46, -39, -36, -32, -29, -27, -24, -20, -17, -14, -10, -5, 1, 4, 6, 9, 13, 18, 22, 27, 31, 36, 38, 43, 49, 51, 52, 55, 58, 60, 47, 52, 55, 55, 55, 54, 54, 54, 54, 55, 56, 56, 56, 54, 53, 48, 46, 48, 38, 35, 42, 47, 47, 46, 45, 43, 41, 40, 39, 38, 36, 34, 33, 33, 32, 30, 31, 28, 27, 30, 26, 26, 23, 23, 22, 20, 19, 18, 17, 16, 14, 14, 13, 12, 11,
- /* 13.0 */ 10, 10, 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 12, 12, 12, 11, 11, 10, 8, 8, 7, 6, 5, 4, 3, 2, 1, -0, -1, -2, -3, -4, -4, -5, -6, -7, -9, -10, -11, -13, -14, -16, -18, -20, -22, -24, -26, -28, -30, -32, -34, -35, -37, -38, -39, -41, -42, -43, -43, -43, -43, -43, -43, -42, -41, -40, -39, -37, -35, -33, -31, -30, -28, -25, -23, -20, -18, -16, -14, -12, -11, -9, -8, -7, -6, -5, -4, -4, -6, -5, -3, -1, -0, 4, 7, 7, 6, 5, 2, 0, -2, -4, -6, -8, -11, -17, -22, -24, -26, -26, -30, -35, -38, -40, -40, -37, -35, -38, -42, -39, -48, -48, -46, -47, -46, -46, -45, -44, -44, -43, -41, -40, -37, -34, -31, -27, -25, -24, -22, -20, -18, -17, -15, -13, -11, -9, -6, -3, -1, 2, 4, 7, 9, 11, 13, 14, 16, 16, 17, 19, 20, 21, 23, 29, 30, 31, 31, 31, 31, 31, 32, 33, 31, 29, 28, 28, 28, 27, 26, 26, 25, 24, 23, 22, 21, 20, 19, 20, 21, 21, 20, 19, 17, 15, 14, 13, 12, 11, 10, 8, 7, 6, 7, 7, 8, 6, 4, 2, 2, 2, 1, -1, -2, -2, -4, -4, -3, -3, -1, -2, -5, -8, -9, -11, -11, -15, -18, -19, -21, -23, -26, -28, -31, -34, -37, -40, -42, -44, -47, -52, -57, -59, -62, -65, -68, -71, -74, -77, -80, -83, -86, -87, -88, -89, -89, -91, -88, -86, -87, -89, -92, -93, -92, -90, -87, -86, -82, -78, -73, -69, -65, -62, -62, -61, -57, -50, -47, -41, -38, -34, -32, -29, -25, -22, -20, -16, -12, -7, -2, 1, 3, 6, 11, 15, 19, 24, 28, 32, 36, 38, 38, 47, 50, 51, 53, 46, 45, 51, 53, 53, 52, 52, 52, 52, 52, 54, 54, 55, 55, 54, 53, 52, 53, 54, 53, 46, 32, 40, 47, 46, 44, 42, 41, 39, 38, 36, 34, 35, 32, 31, 30, 30, 29, 28, 26, 26, 24, 22, 21, 20, 20, 18, 17, 16, 15, 14, 14, 13, 12, 12, 10,
- /* 14.0 */ 9, 10, 10, 10, 9, 9, 9, 9, 9, 9, 10, 11, 11, 11, 11, 10, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, -0, -2, -3, -3, -4, -4, -5, -6, -7, -8, -10, -11, -12, -14, -15, -17, -19, -21, -23, -25, -27, -29, -32, -33, -35, -36, -38, -39, -40, -42, -43, -44, -44, -44, -44, -44, -44, -43, -42, -41, -39, -37, -36, -34, -32, -30, -28, -25, -23, -21, -18, -16, -14, -13, -11, -9, -8, -7, -6, -6, -9, -7, -4, -3, 0, 3, 4, 5, 6, 6, 3, 2, 1, -1, -3, -6, -8, -12, -15, -18, -21, -23, -25, -29, -33, -35, -36, -37, -37, -37, -37, -38, -41, -39, -47, -53, -49, -48, -48, -47, -46, -44, -43, -42, -41, -38, -35, -32, -29, -26, -25, -23, -21, -20, -18, -16, -14, -11, -9, -7, -5, -2, 0, 3, 6, 8, 10, 13, 15, 17, 18, 18, 19, 20, 21, 24, 26, 29, 30, 30, 31, 32, 30, 31, 31, 31, 30, 29, 29, 28, 29, 27, 25, 25, 24, 23, 23, 22, 21, 20, 19, 19, 20, 20, 20, 19, 17, 15, 14, 14, 13, 11, 10, 9, 8, 8, 10, 9, 9, 7, 5, 4, 4, 3, 2, 1, -0, -1, -2, -2, -3, -5, -5, -2, -4, -6, -8, -10, -8, -10, -14, -17, -19, -22, -24, -26, -29, -31, -34, -36, -39, -41, -45, -51, -54, -58, -60, -63, -66, -69, -72, -75, -78, -81, -83, -84, -86, -87, -86, -88, -86, -85, -87, -89, -90, -92, -91, -88, -86, -86, -80, -77, -73, -69, -65, -62, -62, -60, -59, -51, -46, -42, -38, -35, -33, -30, -27, -24, -21, -18, -14, -9, -4, -2, -0, 3, 8, 12, 17, 21, 26, 30, 34, 34, 36, 44, 48, 50, 52, 44, 46, 50, 50, 50, 50, 50, 50, 50, 51, 52, 52, 53, 53, 53, 53, 53, 53, 54, 55, 55, 43, 32, 43, 44, 43, 42, 40, 38, 37, 34, 36, 34, 31, 30, 29, 30, 27, 26, 27, 24, 24, 24, 22, 19, 18, 17, 16, 14, 14, 14, 14, 12, 11, 9, 9,
- /* 15.0 */ 9, 9, 8, 9, 8, 8, 8, 8, 8, 9, 8, 10, 10, 11, 10, 10, 9, 8, 7, 6, 5, 4, 3, 3, 2, 1, -1, -2, -3, -4, -4, -5, -6, -8, -9, -10, -12, -13, -14, -15, -17, -18, -20, -22, -24, -26, -28, -31, -33, -35, -36, -38, -39, -40, -41, -42, -44, -44, -45, -45, -45, -45, -44, -44, -42, -41, -39, -38, -36, -34, -32, -31, -29, -26, -23, -21, -19, -17, -15, -13, -11, -10, -9, -9, -9, -10, -5, -5, 1, 4, 2, 2, 2, 4, 4, 3, 1, -1, -1, -3, -6, -8, -10, -14, -15, -18, -21, -21, -24, -28, -30, -32, -35, -37, -38, -40, -39, -40, -42, -40, -55, -56, -49, -50, -49, -49, -47, -44, -43, -41, -38, -36, -33, -31, -28, -26, -25, -23, -21, -19, -17, -15, -13, -10, -8, -5, -3, -0, 3, 5, 8, 10, 13, 15, 18, 20, 25, 25, 21, 22, 23, 25, 28, 30, 29, 31, 32, 33, 29, 30, 30, 30, 29, 28, 28, 28, 29, 28, 26, 24, 22, 22, 23, 22, 21, 21, 20, 19, 19, 20, 20, 19, 17, 15, 15, 14, 13, 12, 10, 10, 10, 9, 11, 11, 10, 9, 7, 7, 6, 5, 4, 3, 2, 0, 0, 0, -1, -3, -3, 1, -4, -6, -7, -9, -5, -8, -12, -15, -16, -18, -21, -24, -27, -29, -32, -34, -37, -40, -45, -50, -54, -57, -58, -61, -64, -67, -70, -73, -76, -79, -81, -82, -84, -83, -84, -83, -84, -85, -87, -88, -87, -88, -89, -87, -84, -83, -79, -76, -72, -69, -64, -61, -60, -62, -56, -50, -47, -43, -39, -36, -34, -31, -29, -27, -24, -21, -17, -12, -7, -5, -3, 2, 6, 9, 14, 18, 23, 27, 31, 32, 41, 43, 41, 42, 44, 42, 45, 47, 47, 48, 48, 48, 48, 49, 49, 50, 51, 51, 52, 52, 52, 52, 52, 54, 55, 55, 50, 37, 40, 43, 44, 42, 40, 38, 36, 35, 31, 30, 29, 29, 29, 28, 25, 26, 24, 23, 22, 19, 18, 19, 16, 15, 14, 13, 13, 12, 12, 11, 10, 9, 9,
- /* 16.0 */ 7, 7, 8, 8, 8, 8, 8, 8, 8, 9, 10, 10, 10, 9, 10, 9, 8, 8, 7, 6, 5, 4, 4, 4, 3, 1, -0, -2, -3, -4, -5, -6, -7, -8, -10, -11, -13, -14, -16, -17, -19, -21, -22, -24, -26, -27, -29, -32, -34, -35, -37, -39, -40, -41, -42, -43, -44, -45, -45, -46, -46, -45, -45, -44, -43, -42, -40, -38, -36, -34, -33, -31, -29, -26, -24, -21, -19, -17, -15, -15, -14, -12, -8, -3, -3, -8, -6, -2, -2, -3, -2, -1, -3, -2, -0, -1, -2, -2, -4, -5, -7, -10, -13, -15, -17, -19, -23, -25, -27, -29, -31, -34, -37, -39, -41, -42, -42, -41, -41, -42, -61, -55, -49, -46, -46, -47, -46, -44, -42, -40, -38, -34, -32, -29, -27, -25, -24, -22, -20, -18, -16, -14, -11, -8, -5, -3, -1, 3, 5, 8, 10, 13, 15, 17, 19, 21, 23, 31, 25, 24, 25, 26, 27, 30, 30, 32, 33, 32, 28, 28, 29, 29, 28, 28, 28, 28, 29, 29, 28, 27, 24, 23, 24, 23, 21, 22, 21, 21, 21, 21, 21, 19, 17, 17, 15, 14, 13, 12, 11, 10, 11, 11, 11, 12, 11, 10, 9, 8, 7, 6, 5, 5, 3, 2, 2, 1, 0, 0, 1, -1, -3, -4, -5, -6, -5, -9, -12, -15, -17, -19, -21, -23, -26, -29, -31, -33, -36, -40, -44, -47, -52, -56, -56, -59, -62, -65, -67, -70, -74, -75, -78, -80, -80, -80, -80, -80, -81, -83, -85, -85, -83, -81, -82, -84, -83, -81, -78, -75, -72, -68, -64, -61, -60, -61, -56, -51, -47, -44, -40, -37, -35, -32, -31, -30, -27, -23, -19, -14, -12, -9, -6, -1, 4, 7, 13, 16, 20, 24, 29, 31, 41, 43, 38, 33, 41, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 49, 49, 50, 51, 51, 51, 52, 52, 53, 54, 54, 53, 40, 36, 43, 42, 41, 41, 37, 35, 36, 31, 30, 29, 28, 28, 25, 24, 26, 23, 22, 20, 20, 18, 17, 16, 15, 13, 12, 12, 11, 11, 10, 9, 8, 7,
- /* 17.0 */ 7, 7, 6, 7, 7, 8, 8, 8, 9, 9, 10, 10, 10, 9, 9, 8, 8, 7, 6, 6, 6, 5, 5, 5, 4, 2, 0, -1, -3, -4, -5, -7, -8, -9, -10, -12, -14, -15, -17, -19, -21, -22, -23, -25, -27, -29, -31, -33, -35, -36, -38, -39, -40, -42, -43, -44, -45, -45, -46, -46, -46, -46, -45, -44, -44, -42, -40, -39, -37, -35, -33, -31, -30, -27, -24, -22, -20, -20, -19, -14, -8, -5, -3, -2, -6, -9, -7, -5, -5, -6, -5, -4, -5, -9, -9, -8, -6, -6, -7, -8, -10, -12, -14, -17, -19, -21, -25, -29, -30, -33, -38, -41, -43, -44, -45, -45, -43, -42, -41, -56, -62, -53, -49, -49, -48, -47, -44, -42, -41, -39, -36, -34, -31, -28, -25, -24, -22, -21, -19, -17, -15, -13, -10, -7, -4, -1, 2, 5, 8, 10, 13, 15, 16, 18, 21, 29, 25, 27, 25, 25, 26, 27, 27, 30, 32, 32, 34, 30, 27, 27, 28, 28, 28, 28, 28, 27, 28, 29, 28, 28, 27, 26, 25, 24, 22, 23, 22, 22, 22, 24, 23, 21, 20, 19, 17, 15, 14, 13, 11, 10, 11, 11, 12, 13, 12, 11, 10, 10, 8, 8, 7, 5, 4, 4, 3, 3, 2, 1, 0, -1, -2, -3, -4, -4, -4, -8, -12, -16, -20, -22, -23, -24, -25, -28, -32, -34, -36, -39, -42, -44, -50, -55, -55, -56, -59, -62, -64, -69, -71, -72, -75, -77, -76, -77, -78, -77, -78, -79, -79, -80, -80, -77, -75, -78, -80, -80, -77, -73, -71, -67, -63, -61, -60, -60, -58, -51, -48, -44, -41, -38, -37, -33, -32, -30, -27, -25, -20, -17, -15, -11, -8, -5, 1, 4, 8, 12, 16, 21, 25, 28, 34, 43, 41, 33, 40, 43, 42, 42, 43, 43, 44, 44, 44, 44, 45, 47, 48, 49, 50, 50, 51, 51, 51, 52, 53, 52, 49, 38, 31, 40, 44, 40, 41, 37, 37, 32, 31, 30, 28, 27, 26, 24, 23, 24, 21, 20, 19, 18, 17, 16, 14, 13, 12, 11, 11, 10, 9, 9, 8, 7, 7,
- /* 18.0 */ 6, 6, 6, 7, 8, 9, 9, 8, 9, 9, 9, 10, 9, 9, 8, 8, 8, 7, 7, 7, 7, 7, 7, 6, 3, 1, -1, -2, -3, -5, -6, -7, -8, -10, -11, -13, -15, -16, -18, -20, -22, -23, -25, -26, -28, -30, -32, -34, -36, -37, -39, -40, -41, -42, -43, -44, -45, -46, -46, -47, -47, -46, -46, -45, -44, -42, -41, -39, -37, -35, -33, -32, -30, -28, -25, -23, -23, -18, -14, -9, -7, -6, -4, -6, -12, -11, -13, -11, -10, -8, -7, -6, -8, -11, -11, -12, -12, -13, -11, -12, -15, -16, -15, -15, -20, -23, -25, -28, -29, -34, -38, -41, -45, -42, -42, -45, -46, -43, -49, -62, -58, -51, -48, -47, -45, -44, -42, -41, -39, -38, -35, -33, -30, -27, -24, -23, -21, -19, -18, -16, -14, -12, -9, -6, -3, -0, 3, 6, 9, 12, 14, 16, 18, 20, 22, 24, 25, 25, 26, 27, 26, 26, 26, 28, 33, 32, 35, 31, 30, 29, 28, 28, 28, 27, 27, 27, 27, 27, 29, 29, 29, 28, 27, 26, 24, 23, 23, 23, 24, 27, 25, 23, 22, 20, 18, 16, 15, 15, 13, 12, 12, 11, 11, 12, 13, 12, 11, 11, 9, 8, 7, 6, 6, 5, 4, 4, 4, 3, 0, -1, -1, -2, -2, -0, -4, -9, -14, -18, -22, -25, -27, -28, -29, -32, -34, -34, -35, -36, -40, -44, -48, -54, -53, -54, -56, -58, -62, -66, -66, -69, -72, -70, -71, -75, -74, -75, -75, -75, -75, -75, -75, -75, -72, -70, -72, -76, -74, -71, -69, -67, -63, -60, -59, -59, -55, -50, -48, -44, -42, -39, -37, -34, -32, -32, -30, -25, -21, -19, -16, -13, -8, -6, -4, 1, 5, 9, 13, 18, 22, 25, 31, 39, 37, 31, 36, 38, 40, 40, 41, 41, 41, 42, 42, 43, 43, 45, 46, 47, 48, 49, 50, 50, 50, 52, 51, 50, 44, 37, 31, 39, 41, 43, 38, 36, 33, 32, 30, 28, 26, 25, 24, 22, 21, 21, 20, 19, 18, 18, 16, 14, 12, 15, 12, 11, 10, 9, 8, 7, 7, 6, 6,
- /* 19.0 */ 5, 5, 5, 5, 6, 7, 8, 9, 8, 10, 9, 10, 9, 9, 8, 8, 8, 8, 7, 8, 7, 7, 7, 6, 13, 8, -2, -2, -3, -5, -7, -8, -9, -10, -12, -14, -16, -17, -19, -21, -22, -24, -25, -27, -29, -31, -33, -35, -36, -38, -39, -40, -42, -43, -44, -44, -46, -46, -47, -47, -47, -47, -46, -45, -44, -43, -41, -39, -37, -35, -34, -32, -30, -28, -28, -25, -19, -16, -13, -11, -7, -5, -4, -6, -13, -13, -14, -12, -11, -10, -9, -7, -7, -12, -12, -14, -13, -14, -16, -16, -20, -22, -24, -26, -27, -27, -27, -28, -27, -29, -36, -44, -55, -62, -61, -55, -55, -61, -62, -57, -52, -48, -48, -47, -45, -43, -41, -40, -39, -37, -34, -32, -29, -25, -23, -21, -19, -17, -16, -14, -12, -10, -8, -5, -2, 1, 4, 8, 11, 14, 15, 17, 18, 20, 22, 23, 24, 26, 27, 27, 26, 26, 26, 29, 33, 34, 35, 32, 31, 31, 30, 28, 28, 27, 26, 26, 26, 27, 28, 30, 31, 30, 30, 28, 26, 25, 24, 23, 25, 28, 26, 25, 23, 21, 19, 18, 18, 18, 17, 16, 13, 11, 11, 12, 13, 12, 12, 13, 11, 9, 8, 8, 7, 6, 5, 5, 5, 5, 2, 1, -0, -1, 1, -0, -5, -10, -15, -19, -23, -27, -29, -31, -32, -34, -36, -37, -36, -35, -37, -42, -43, -50, -50, -52, -54, -56, -58, -60, -63, -67, -65, -67, -69, -69, -70, -70, -71, -72, -71, -72, -72, -70, -68, -65, -67, -67, -70, -68, -67, -65, -63, -60, -60, -57, -51, -49, -48, -44, -41, -39, -38, -35, -33, -31, -29, -27, -24, -21, -18, -14, -10, -7, -4, 0, 4, 7, 10, 15, 19, 22, 24, 30, 33, 30, 33, 35, 37, 38, 39, 39, 40, 40, 40, 41, 42, 43, 45, 46, 47, 49, 49, 49, 49, 51, 50, 48, 42, 35, 33, 38, 38, 38, 37, 35, 33, 31, 29, 26, 25, 23, 22, 21, 20, 19, 17, 19, 15, 17, 14, 12, 11, 10, 9, 9, 7, 7, 7, 6, 6, 6, 5,
- /* 20.0 */ 4, 5, 4, 4, 4, 5, 6, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 7, 5, 6, 18, 12, -2, -3, -4, -5, -7, -8, -10, -11, -13, -15, -17, -18, -20, -22, -23, -24, -26, -28, -29, -31, -33, -35, -36, -38, -39, -41, -42, -43, -44, -45, -46, -47, -47, -48, -48, -47, -46, -46, -44, -43, -41, -40, -38, -36, -34, -32, -30, -29, -29, -21, -16, -14, -12, -10, -7, -6, -6, -10, -15, -19, -17, -16, -13, -12, -11, -10, -9, -13, -16, -15, -17, -17, -18, -19, -19, -21, -23, -25, -26, -27, -36, -37, -41, -45, -47, -51, -59, -62, -65, -63, -59, -57, -53, -50, -47, -46, -45, -46, -45, -43, -41, -40, -38, -36, -33, -30, -27, -24, -21, -18, -17, -15, -14, -12, -10, -8, -6, -4, -1, 2, 6, 9, 13, 15, 17, 18, 19, 20, 21, 23, 23, 25, 26, 25, 25, 26, 28, 31, 33, 34, 34, 34, 33, 32, 30, 29, 27, 27, 27, 27, 27, 27, 29, 30, 31, 31, 32, 30, 28, 27, 25, 24, 25, 27, 27, 25, 23, 21, 20, 20, 22, 23, 24, 20, 14, 12, 12, 12, 13, 14, 14, 14, 12, 11, 10, 9, 9, 8, 7, 6, 7, 6, 3, 2, 2, 2, 3, -1, -5, -10, -15, -20, -24, -28, -31, -33, -34, -35, -36, -37, -35, -33, -35, -39, -43, -48, -49, -50, -52, -55, -56, -57, -61, -63, -61, -64, -65, -66, -66, -67, -67, -67, -68, -68, -68, -67, -65, -65, -63, -63, -64, -64, -62, -61, -60, -57, -55, -53, -50, -51, -48, -44, -42, -39, -37, -35, -34, -31, -30, -28, -25, -23, -21, -17, -13, -9, -6, -2, 2, 5, 9, 13, 17, 20, 21, 22, 31, 28, 31, 33, 34, 35, 36, 37, 38, 38, 39, 40, 41, 42, 44, 45, 47, 48, 49, 49, 49, 50, 49, 47, 41, 31, 36, 41, 41, 37, 36, 33, 31, 28, 28, 27, 24, 21, 22, 21, 19, 18, 15, 14, 13, 13, 11, 10, 9, 7, 8, 6, 6, 5, 7, 5, 5, 4, 4,
- /* 21.0 */ 3, 2, 2, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 9, 9, 9, 9, 8, 7, 6, 6, 12, 15, 10, -0, -2, -3, -4, -6, -8, -9, -11, -12, -14, -16, -17, -19, -20, -22, -23, -25, -27, -28, -30, -32, -34, -35, -36, -38, -40, -41, -42, -43, -45, -46, -46, -47, -48, -48, -47, -47, -47, -46, -45, -43, -42, -40, -38, -36, -34, -32, -31, -30, -28, -22, -18, -15, -13, -11, -10, -10, -13, -15, -19, -22, -21, -21, -14, -13, -14, -12, -12, -11, -18, -19, -20, -20, -22, -23, -24, -21, -23, -25, -29, -34, -42, -44, -46, -44, -48, -51, -51, -51, -52, -52, -51, -51, -51, -50, -49, -47, -45, -44, -44, -42, -41, -39, -36, -34, -31, -29, -26, -22, -19, -16, -15, -13, -12, -10, -8, -6, -4, -2, 1, 4, 7, 11, 14, 16, 17, 18, 18, 19, 20, 21, 22, 23, 24, 24, 24, 25, 28, 32, 35, 36, 35, 35, 35, 33, 32, 30, 29, 28, 27, 27, 27, 27, 29, 29, 30, 31, 32, 32, 30, 29, 28, 26, 26, 28, 27, 25, 24, 22, 21, 22, 25, 29, 30, 24, 17, 14, 13, 13, 13, 15, 15, 14, 13, 11, 10, 9, 10, 9, 9, 9, 8, 6, 4, 3, 4, 6, 4, -0, -4, -8, -13, -19, -24, -28, -31, -33, -35, -35, -36, -36, -35, -34, -33, -35, -40, -43, -46, -48, -50, -55, -55, -57, -58, -57, -57, -59, -61, -62, -63, -63, -63, -63, -64, -64, -65, -65, -64, -64, -62, -60, -60, -62, -59, -58, -57, -56, -54, -52, -51, -52, -48, -43, -42, -39, -37, -36, -34, -32, -31, -29, -27, -24, -22, -19, -15, -11, -8, -4, -1, 3, 8, 12, 15, 18, 19, 21, 28, 26, 29, 31, 33, 34, 35, 36, 36, 37, 38, 39, 40, 41, 42, 45, 46, 47, 48, 48, 48, 49, 48, 44, 35, 29, 38, 37, 36, 34, 33, 33, 29, 30, 26, 25, 23, 19, 19, 18, 16, 16, 14, 12, 12, 10, 9, 8, 7, 6, 5, 4, 5, 4, 5, 6, 4, 4, 3,
- /* 22.0 */ 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 9, 9, 8, 8, 7, 8, 14, 11, 7, 2, -1, -0, -1, -3, -5, -7, -9, -10, -11, -13, -15, -16, -18, -20, -21, -23, -24, -25, -27, -29, -31, -32, -34, -35, -36, -38, -39, -41, -42, -43, -45, -45, -46, -47, -47, -48, -47, -47, -47, -46, -45, -43, -42, -40, -38, -37, -35, -33, -31, -29, -25, -22, -18, -15, -13, -12, -12, -14, -16, -19, -24, -26, -24, -24, -18, -16, -15, -15, -14, -13, -18, -20, -19, -17, -18, -20, -21, -23, -24, -29, -32, -37, -38, -42, -43, -49, -51, -51, -51, -51, -52, -52, -52, -52, -51, -50, -50, -49, -47, -45, -44, -42, -40, -38, -36, -34, -31, -27, -24, -21, -17, -14, -13, -11, -10, -8, -6, -4, -2, 0, 3, 6, 9, 11, 14, 15, 17, 17, 17, 18, 19, 20, 22, 23, 24, 24, 24, 25, 27, 33, 36, 36, 36, 37, 37, 35, 33, 32, 30, 29, 27, 26, 25, 25, 27, 29, 30, 31, 32, 32, 31, 32, 31, 30, 30, 30, 27, 27, 25, 24, 23, 24, 26, 28, 28, 26, 20, 17, 15, 13, 13, 15, 15, 14, 13, 12, 11, 10, 9, 9, 10, 11, 8, 6, 5, 4, 6, 6, 4, 1, -2, -6, -10, -16, -23, -27, -31, -33, -34, -34, -34, -35, -35, -33, -32, -32, -36, -41, -42, -45, -44, -49, -52, -53, -54, -54, -54, -56, -58, -60, -60, -60, -61, -60, -59, -60, -60, -61, -62, -62, -60, -58, -58, -59, -58, -57, -57, -56, -54, -51, -51, -51, -48, -44, -42, -40, -38, -37, -34, -33, -30, -30, -29, -26, -23, -20, -17, -14, -10, -6, -2, 1, 5, 10, 14, 17, 19, 22, 23, 24, 27, 28, 30, 32, 34, 35, 35, 36, 37, 38, 39, 40, 41, 44, 45, 47, 48, 47, 49, 47, 43, 33, 26, 32, 37, 37, 36, 34, 32, 30, 27, 26, 23, 22, 20, 19, 17, 16, 15, 13, 11, 10, 8, 7, 7, 6, 5, 4, 3, 3, 2, 4, 2, 2, 3, 2, 1,
- /* 23.0 */ -1, -1, -0, 1, 1, 2, 3, 4, 5, 6, 7, 7, 7, 6, 7, 8, 10, 11, 12, 7, 4, 4, 3, 3, 3, 2, -0, -3, -6, -8, -9, -11, -12, -14, -16, -17, -18, -20, -21, -22, -24, -26, -27, -29, -31, -33, -34, -35, -36, -38, -40, -41, -42, -43, -45, -46, -46, -47, -47, -48, -47, -47, -46, -46, -45, -43, -42, -40, -39, -37, -33, -33, -31, -28, -25, -21, -18, -16, -14, -13, -13, -16, -18, -22, -26, -29, -27, -26, -27, -25, -20, -16, -17, -18, -19, -23, -23, -22, -22, -23, -24, -25, -24, -27, -30, -36, -39, -44, -47, -49, -50, -51, -51, -52, -52, -52, -53, -53, -52, -51, -50, -49, -47, -46, -44, -42, -39, -37, -34, -31, -29, -26, -22, -19, -16, -12, -11, -9, -8, -6, -4, -2, -1, 2, 4, 7, 9, 11, 13, 15, 16, 17, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 29, 33, 36, 38, 37, 39, 38, 36, 35, 33, 31, 29, 28, 26, 25, 25, 27, 27, 30, 32, 32, 33, 33, 34, 36, 34, 33, 31, 29, 29, 27, 25, 25, 26, 27, 27, 27, 25, 22, 19, 16, 14, 14, 14, 15, 14, 13, 13, 11, 10, 10, 9, 11, 11, 8, 7, 6, 6, 7, 6, 5, 2, 0, -3, -8, -13, -20, -26, -30, -32, -33, -33, -33, -33, -33, -30, -28, -30, -38, -40, -43, -46, -45, -47, -47, -48, -50, -51, -52, -53, -55, -56, -57, -56, -57, -58, -59, -60, -58, -59, -60, -60, -57, -55, -56, -56, -57, -56, -56, -55, -54, -51, -51, -51, -48, -44, -43, -41, -39, -37, -35, -33, -31, -30, -29, -28, -26, -22, -19, -15, -12, -8, -4, -0, 4, 8, 13, 16, 19, 26, 20, 17, 19, 22, 26, 30, 32, 34, 35, 36, 37, 38, 39, 40, 39, 42, 44, 46, 47, 48, 47, 40, 33, 27, 31, 35, 36, 35, 34, 31, 29, 31, 25, 24, 23, 21, 19, 15, 14, 13, 12, 11, 9, 8, 7, 5, 4, 3, 2, 2, 1, 1, 1, -0, 1, 0, -0, -1, -1,
- /* 24.0 */ -2, -2, -1, -0, 0, 2, 2, 3, 4, 4, 4, 6, 7, 12, 14, 10, 7, 5, 5, 4, 4, 4, 4, 3, 2, 1, -2, -5, -7, -9, -10, -11, -13, -14, -16, -17, -19, -20, -21, -22, -24, -26, -28, -29, -31, -33, -34, -36, -37, -39, -40, -41, -42, -43, -44, -45, -46, -47, -47, -47, -47, -47, -46, -45, -44, -43, -42, -41, -37, -35, -33, -33, -30, -27, -22, -19, -18, -17, -15, -14, -13, -18, -20, -23, -28, -31, -31, -28, -28, -29, -28, -24, -21, -23, -24, -26, -25, -25, -26, -26, -26, -27, -27, -32, -34, -39, -43, -45, -48, -50, -51, -52, -52, -52, -51, -52, -52, -53, -52, -51, -50, -49, -47, -46, -44, -41, -39, -36, -34, -31, -28, -25, -21, -17, -13, -11, -9, -7, -5, -3, -2, 0, 2, 3, 5, 7, 9, 11, 14, 16, 17, 18, 19, 20, 20, 22, 23, 24, 25, 27, 28, 30, 31, 33, 35, 37, 40, 39, 38, 38, 36, 34, 33, 31, 30, 29, 27, 26, 26, 28, 29, 31, 32, 33, 34, 36, 37, 37, 35, 34, 33, 30, 28, 26, 26, 26, 27, 27, 26, 25, 22, 20, 17, 15, 14, 15, 14, 14, 13, 13, 12, 12, 11, 10, 11, 11, 9, 8, 8, 8, 8, 8, 6, 4, 2, -2, -5, -11, -18, -24, -28, -31, -33, -33, -33, -33, -30, -27, -30, -36, -37, -39, -42, -45, -47, -48, -45, -46, -46, -48, -48, -49, -51, -52, -53, -54, -55, -55, -56, -58, -58, -59, -59, -59, -58, -57, -56, -55, -56, -56, -55, -55, -55, -52, -51, -51, -49, -46, -43, -41, -39, -37, -36, -33, -32, -32, -31, -29, -27, -24, -20, -17, -13, -10, -6, -2, 2, 6, 10, 14, 17, 24, 15, 18, 21, 23, 27, 25, 29, 32, 35, 36, 37, 37, 37, 38, 39, 42, 44, 45, 46, 48, 44, 35, 29, 36, 37, 35, 34, 32, 33, 30, 28, 25, 24, 21, 20, 19, 16, 16, 13, 12, 11, 9, 7, 5, 4, 3, 2, 1, 1, -0, -1, -1, -1, -1, -2, -2, -3, -2, -2,
- /* 25.0 */ -3, -2, -1, -1, -1, -0, 1, 0, 5, 6, 7, 6, 14, 7, 3, 4, 4, 4, 4, 4, 3, 3, 2, 1, -0, -2, -4, -7, -8, -10, -11, -12, -14, -15, -16, -17, -19, -20, -21, -23, -25, -26, -28, -30, -31, -33, -34, -36, -38, -39, -41, -42, -43, -44, -45, -46, -46, -47, -47, -47, -47, -46, -45, -45, -43, -43, -41, -39, -37, -34, -35, -33, -30, -26, -22, -21, -20, -19, -16, -15, -16, -19, -23, -22, -27, -32, -32, -30, -28, -27, -27, -28, -28, -26, -24, -27, -23, -23, -24, -24, -28, -28, -32, -33, -39, -43, -44, -47, -49, -51, -52, -52, -52, -51, -51, -51, -51, -52, -52, -51, -49, -48, -47, -45, -43, -41, -38, -35, -33, -29, -26, -22, -19, -15, -11, -8, -7, -4, -2, -0, 1, 3, 5, 6, 8, 9, 11, 13, 15, 17, 18, 19, 21, 21, 21, 22, 23, 25, 26, 28, 31, 33, 33, 31, 34, 34, 37, 39, 40, 39, 38, 36, 34, 32, 31, 30, 29, 28, 27, 27, 27, 28, 28, 30, 33, 35, 36, 36, 36, 35, 33, 30, 29, 27, 26, 25, 27, 28, 26, 25, 22, 20, 19, 17, 16, 15, 14, 13, 13, 13, 13, 13, 13, 12, 13, 12, 10, 9, 10, 10, 10, 9, 8, 5, 2, -2, -5, -10, -16, -22, -27, -30, -31, -32, -33, -33, -28, -27, -29, -30, -32, -32, -34, -36, -38, -42, -43, -43, -45, -46, -46, -46, -48, -49, -48, -52, -54, -54, -56, -59, -60, -60, -60, -62, -62, -62, -61, -59, -56, -55, -54, -53, -52, -51, -50, -51, -49, -45, -41, -40, -39, -37, -35, -33, -31, -32, -32, -30, -27, -25, -21, -17, -14, -11, -7, -4, 1, 5, 9, 12, 15, 18, 20, 22, 25, 28, 26, 25, 24, 29, 33, 36, 34, 36, 37, 37, 39, 41, 43, 44, 46, 47, 42, 33, 38, 38, 35, 34, 32, 31, 28, 27, 26, 24, 21, 19, 17, 15, 14, 13, 10, 9, 9, 7, 5, 3, 2, 1, 0, -1, -1, -2, -3, -3, -3, -4, -4, -4, -4, -3, -3,
- /* 26.0 */ -4, -3, -3, -2, -2, -1, 6, 2, 5, 6, 3, 5, 5, 3, 4, 4, 4, 3, 3, 2, 2, 1, -0, -2, -3, -5, -7, -8, -9, -11, -12, -13, -14, -15, -17, -18, -19, -20, -22, -23, -25, -27, -28, -30, -32, -33, -35, -36, -38, -39, -41, -42, -43, -44, -45, -46, -46, -46, -46, -46, -46, -46, -45, -44, -43, -42, -41, -37, -36, -35, -35, -31, -29, -24, -21, -21, -21, -20, -18, -19, -20, -23, -25, -23, -27, -33, -31, -29, -29, -29, -27, -26, -26, -25, -26, -28, -25, -25, -24, -26, -28, -30, -33, -39, -44, -43, -45, -48, -50, -51, -53, -52, -51, -50, -50, -50, -50, -51, -51, -50, -49, -47, -46, -44, -42, -39, -37, -34, -31, -28, -24, -21, -17, -13, -10, -6, -4, -2, 1, 2, 4, 6, 7, 9, 11, 12, 13, 15, 17, 19, 20, 22, 23, 24, 24, 24, 25, 26, 27, 29, 32, 34, 34, 31, 31, 34, 36, 39, 39, 40, 40, 37, 35, 33, 32, 32, 31, 30, 28, 27, 26, 26, 26, 28, 30, 32, 34, 33, 33, 32, 31, 29, 28, 27, 26, 26, 28, 30, 28, 26, 24, 22, 21, 19, 17, 15, 14, 13, 13, 12, 13, 13, 13, 13, 14, 12, 11, 13, 12, 12, 11, 10, 8, 5, 2, -1, -5, -10, -15, -21, -26, -28, -30, -31, -32, -33, -31, -26, -22, -24, -26, -28, -30, -31, -31, -35, -40, -42, -44, -45, -45, -45, -46, -48, -48, -49, -53, -55, -57, -59, -61, -62, -64, -66, -66, -65, -64, -62, -58, -53, -50, -49, -48, -53, -55, -52, -49, -46, -42, -39, -38, -37, -36, -33, -31, -31, -30, -28, -26, -24, -21, -19, -16, -13, -9, -6, -1, 3, 7, 10, 13, 16, 19, 22, 26, 28, 29, 29, 28, 25, 28, 33, 36, 36, 36, 37, 39, 40, 42, 43, 44, 43, 39, 35, 39, 38, 36, 34, 32, 28, 27, 26, 24, 22, 19, 17, 14, 13, 11, 10, 8, 7, 6, 5, 3, 2, 1, -0, -2, -3, -3, -4, -5, -5, -5, -5, -5, -5, -4, -4, -4,
- /* 27.0 */ -4, -5, -4, -1, -1, -3, -3, -3, -1, -1, 1, 2, 2, 3, 3, 3, 2, 1, 0, 0, -1, -2, -3, -5, -6, -7, -8, -10, -11, -12, -13, -14, -15, -16, -17, -18, -20, -21, -23, -24, -26, -28, -29, -31, -32, -33, -35, -36, -38, -39, -41, -42, -43, -44, -45, -45, -45, -46, -46, -46, -45, -45, -44, -43, -43, -43, -38, -37, -36, -36, -33, -31, -27, -24, -23, -22, -21, -20, -20, -21, -22, -25, -26, -25, -28, -31, -30, -29, -29, -29, -27, -26, -26, -27, -29, -27, -25, -26, -26, -27, -30, -30, -33, -38, -44, -44, -45, -48, -50, -52, -52, -52, -51, -49, -49, -49, -49, -49, -49, -49, -48, -46, -45, -43, -41, -38, -35, -33, -30, -26, -23, -19, -15, -12, -8, -4, -1, 1, 3, 5, 7, 8, 10, 12, 14, 15, 17, 18, 20, 21, 23, 23, 25, 26, 26, 26, 25, 26, 28, 30, 31, 34, 34, 33, 32, 32, 36, 38, 39, 39, 40, 38, 38, 35, 33, 33, 33, 32, 30, 27, 26, 26, 25, 26, 27, 29, 30, 30, 30, 30, 29, 29, 28, 27, 27, 28, 30, 31, 30, 27, 25, 23, 22, 20, 18, 16, 15, 14, 14, 14, 13, 13, 13, 14, 13, 12, 14, 15, 14, 12, 11, 10, 7, 4, 1, -2, -6, -10, -15, -20, -25, -27, -29, -28, -26, -26, -30, -28, -20, -22, -24, -25, -27, -29, -31, -31, -35, -40, -45, -43, -45, -45, -44, -46, -48, -47, -50, -54, -57, -60, -63, -66, -67, -67, -67, -65, -59, -51, -47, -41, -41, -42, -42, -47, -56, -56, -51, -46, -44, -40, -36, -35, -35, -34, -32, -31, -31, -29, -27, -24, -22, -19, -18, -15, -11, -7, -4, 1, 5, 9, 12, 15, 17, 21, 24, 27, 30, 31, 32, 26, 24, 29, 33, 35, 35, 37, 39, 40, 42, 43, 44, 42, 46, 33, 33, 35, 34, 32, 29, 28, 25, 23, 22, 18, 16, 15, 13, 11, 10, 8, 7, 5, 4, 3, 1, 0, -1, -2, -3, -4, -5, -6, -6, -6, -6, -6, -5, -5, -4, -4, -4,
- /* 28.0 */ -5, -4, -0, -2, 1, -4, -5, -3, -2, -1, -0, 0, 1, 1, 0, -0, -1, -2, -2, -3, -3, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -14, -15, -16, -18, -19, -21, -22, -24, -25, -27, -28, -30, -31, -32, -34, -35, -36, -38, -39, -40, -42, -43, -44, -44, -44, -45, -45, -45, -45, -44, -44, -43, -43, -43, -37, -37, -35, -36, -34, -32, -29, -25, -24, -24, -23, -22, -21, -21, -23, -24, -26, -28, -28, -27, -28, -27, -26, -26, -25, -26, -27, -30, -31, -30, -26, -25, -26, -28, -30, -31, -34, -36, -38, -45, -45, -46, -48, -50, -52, -52, -51, -50, -48, -48, -47, -47, -47, -47, -46, -46, -44, -43, -41, -39, -36, -34, -31, -28, -25, -21, -18, -14, -10, -6, -2, 2, 4, 6, 8, 10, 11, 13, 15, 17, 19, 20, 21, 23, 25, 26, 26, 26, 27, 27, 27, 27, 27, 28, 30, 31, 34, 38, 45, 44, 41, 41, 39, 39, 39, 39, 39, 38, 36, 36, 36, 36, 34, 31, 30, 28, 28, 27, 27, 28, 28, 28, 28, 29, 29, 28, 28, 29, 29, 29, 30, 30, 30, 29, 26, 25, 23, 22, 21, 20, 17, 15, 15, 15, 15, 15, 14, 14, 13, 11, 13, 18, 17, 14, 12, 10, 8, 6, 3, -0, -3, -7, -11, -15, -19, -23, -26, -24, -21, -19, -19, -21, -19, -18, -20, -20, -21, -25, -30, -32, -32, -32, -38, -44, -42, -45, -48, -47, -47, -46, -47, -48, -53, -56, -60, -63, -63, -58, -55, -53, -45, -33, -29, -29, -29, -30, -31, -30, -34, -41, -48, -49, -42, -40, -37, -34, -32, -33, -35, -37, -37, -35, -31, -28, -25, -23, -20, -19, -16, -12, -9, -5, -1, 3, 7, 10, 13, 16, 20, 23, 26, 29, 31, 31, 29, 25, 26, 33, 35, 35, 37, 38, 40, 41, 42, 43, 40, 48, 32, 30, 32, 33, 30, 28, 24, 22, 21, 18, 17, 15, 13, 11, 9, 8, 6, 5, 4, 3, 1, 0, -1, -2, -3, -4, -5, -6, -7, -7, -7, -7, -6, -6, -5, -5, -5, -5,
- /* 29.0 */ -5, -3, -5, -6, -5, -6, -4, -4, -3, -3, -3, -2, -2, -3, -3, -3, -4, -4, -4, -6, -7, -8, -9, -10, -10, -11, -12, -12, -13, -13, -15, -16, -17, -17, -19, -20, -22, -23, -25, -26, -27, -29, -30, -31, -33, -34, -35, -36, -38, -39, -41, -42, -43, -43, -44, -44, -44, -44, -44, -44, -43, -43, -42, -42, -41, -38, -35, -37, -35, -33, -31, -29, -25, -24, -25, -24, -23, -22, -22, -24, -24, -25, -27, -29, -28, -27, -27, -26, -25, -25, -25, -25, -29, -29, -27, -28, -28, -29, -29, -30, -32, -35, -37, -41, -46, -46, -47, -48, -51, -52, -52, -51, -49, -48, -47, -46, -45, -45, -44, -44, -43, -42, -40, -38, -37, -34, -32, -29, -26, -23, -19, -16, -12, -8, -4, -0, 4, 7, 9, 11, 13, 15, 16, 18, 20, 22, 23, 25, 26, 27, 28, 28, 27, 28, 29, 29, 29, 29, 30, 32, 32, 34, 39, 37, 37, 36, 42, 42, 41, 41, 42, 42, 40, 40, 40, 40, 40, 38, 36, 34, 31, 29, 28, 28, 28, 27, 27, 27, 27, 28, 29, 28, 29, 30, 31, 31, 30, 29, 29, 26, 25, 23, 22, 23, 21, 20, 18, 16, 15, 16, 16, 15, 16, 14, 13, 15, 20, 17, 14, 12, 10, 8, 5, 2, -0, -3, -7, -11, -15, -18, -21, -21, -15, -12, -13, -11, -8, -7, -11, -17, -17, -17, -22, -25, -27, -30, -30, -34, -42, -39, -45, -50, -49, -48, -47, -47, -49, -51, -55, -57, -55, -48, -40, -34, -31, -29, -30, -30, -31, -33, -34, -33, -32, -31, -30, -40, -44, -40, -37, -34, -32, -31, -32, -38, -43, -42, -39, -34, -30, -27, -24, -21, -20, -18, -13, -9, -6, -2, 2, 6, 8, 12, 15, 19, 22, 24, 27, 29, 30, 30, 26, 24, 29, 33, 36, 36, 38, 39, 40, 42, 43, 36, 37, 23, 30, 32, 30, 28, 25, 23, 21, 20, 17, 16, 13, 11, 10, 9, 7, 5, 4, 3, 2, 1, -1, -3, -3, -5, -5, -6, -6, -7, -7, -7, -7, -6, -6, -6, -6, -6, -5,
- /* 30.0 */ -8, -8, -8, -8, -7, -8, -6, -6, -6, -5, -5, -6, -6, -6, -6, -6, -6, -7, -7, -8, -9, -10, -11, -11, -12, -12, -13, -13, -14, -15, -16, -17, -17, -18, -20, -21, -23, -24, -25, -27, -28, -29, -31, -32, -33, -34, -36, -37, -38, -39, -40, -41, -42, -42, -43, -43, -43, -43, -43, -43, -42, -42, -41, -40, -38, -35, -37, -35, -33, -31, -30, -28, -25, -25, -25, -24, -22, -23, -24, -24, -23, -24, -27, -28, -29, -29, -28, -28, -28, -28, -27, -28, -28, -28, -28, -29, -29, -29, -29, -30, -32, -36, -39, -41, -46, -46, -47, -49, -51, -52, -52, -51, -49, -47, -46, -45, -43, -42, -42, -41, -41, -40, -38, -36, -35, -33, -30, -28, -25, -21, -18, -14, -10, -6, -3, 1, 5, 9, 12, 14, 16, 18, 20, 22, 23, 25, 26, 28, 29, 30, 30, 33, 33, 30, 31, 30, 30, 31, 32, 33, 34, 35, 35, 37, 39, 40, 41, 44, 42, 40, 43, 47, 49, 48, 47, 46, 44, 41, 39, 38, 35, 33, 30, 29, 27, 26, 26, 26, 27, 27, 28, 29, 30, 31, 31, 30, 30, 29, 28, 27, 26, 24, 23, 22, 22, 21, 21, 18, 17, 17, 16, 16, 16, 17, 17, 17, 19, 17, 14, 12, 10, 7, 5, 2, -0, -4, -8, -13, -15, -17, -18, -13, -7, -8, -8, -6, -6, -7, -13, -16, -15, -19, -22, -23, -24, -27, -28, -28, -34, -33, -39, -49, -49, -47, -46, -46, -48, -50, -48, -39, -35, -29, -25, -26, -27, -28, -30, -30, -31, -33, -34, -35, -35, -34, -35, -38, -38, -36, -35, -34, -32, -31, -32, -41, -44, -42, -41, -38, -32, -27, -24, -22, -22, -19, -15, -11, -7, -3, 1, 4, 7, 10, 14, 17, 21, 23, 25, 28, 30, 31, 30, 26, 27, 32, 34, 36, 37, 39, 39, 42, 42, 35, 25, 23, 30, 30, 28, 26, 23, 21, 19, 17, 16, 14, 12, 11, 9, 8, 6, 4, 3, 2, -0, -1, -3, -4, -5, -6, -6, -7, -7, -7, -7, -7, -6, -7, -7, -7, -7, -5, -8,
- /* 31.0 */ -8, -9, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -9, -9, -10, -11, -12, -13, -13, -13, -13, -14, -15, -15, -16, -18, -20, -21, -23, -24, -25, -26, -27, -28, -29, -30, -31, -32, -33, -35, -36, -37, -38, -39, -40, -41, -41, -42, -42, -42, -42, -42, -42, -42, -41, -41, -40, -38, -34, -35, -36, -34, -32, -30, -28, -27, -26, -26, -24, -24, -23, -24, -25, -24, -24, -25, -27, -27, -28, -28, -29, -28, -28, -28, -28, -29, -29, -29, -28, -29, -29, -29, -30, -31, -34, -36, -40, -43, -44, -44, -48, -51, -52, -52, -51, -50, -48, -46, -45, -43, -42, -40, -40, -39, -39, -38, -36, -35, -33, -31, -28, -26, -23, -19, -16, -12, -8, -5, -1, 3, 7, 11, 14, 18, 20, 22, 24, 25, 27, 28, 29, 30, 32, 32, 32, 34, 32, 32, 32, 31, 30, 32, 33, 35, 36, 37, 37, 38, 39, 41, 44, 44, 44, 43, 46, 51, 53, 54, 52, 50, 48, 46, 43, 42, 39, 37, 34, 32, 29, 27, 27, 27, 27, 28, 29, 31, 32, 31, 31, 30, 29, 28, 28, 27, 27, 26, 24, 23, 22, 21, 21, 19, 17, 15, 15, 16, 16, 17, 17, 18, 20, 18, 16, 14, 12, 9, 5, 2, -1, -6, -10, -14, -16, -16, -11, -5, -3, -4, -5, -5, -7, -9, -14, -14, -15, -19, -21, -22, -23, -25, -26, -25, -26, -31, -37, -48, -47, -45, -44, -46, -48, -44, -36, -24, -22, -24, -26, -28, -29, -30, -31, -31, -33, -34, -35, -36, -36, -37, -36, -37, -38, -37, -36, -34, -32, -31, -31, -33, -41, -43, -42, -39, -35, -29, -24, -23, -22, -20, -16, -12, -8, -4, -1, 3, 6, 9, 13, 16, 19, 22, 24, 27, 29, 30, 31, 29, 27, 30, 33, 36, 37, 38, 39, 42, 42, 35, 20, 24, 29, 28, 26, 24, 22, 20, 18, 16, 14, 13, 11, 10, 9, 7, 6, 4, 3, 1, -1, -3, -4, -5, -7, -7, -8, -8, -8, -8, -9, -8, -8, -8, -6, -8, -8, -9, -8,
- /* 32.0 */ -9, -10, -9, -9, -10, -10, -9, -10, -10, -10, -10, -10, -10, -10, -10, -10, -9, -9, -10, -11, -11, -12, -13, -14, -14, -14, -14, -15, -16, -17, -18, -20, -21, -23, -24, -25, -26, -27, -28, -29, -30, -31, -32, -33, -34, -36, -37, -38, -39, -40, -40, -40, -41, -41, -42, -42, -42, -42, -42, -41, -41, -39, -38, -37, -33, -35, -34, -33, -31, -30, -28, -27, -26, -25, -24, -23, -26, -24, -26, -26, -27, -28, -28, -28, -27, -28, -27, -27, -27, -27, -27, -28, -29, -29, -28, -27, -28, -29, -31, -33, -34, -37, -39, -41, -43, -46, -50, -51, -51, -51, -50, -48, -47, -45, -43, -37, -40, -39, -37, -37, -37, -36, -35, -34, -31, -29, -26, -24, -21, -18, -14, -10, -7, -3, 1, 4, 8, 12, 16, 20, 23, 25, 27, 28, 30, 31, 33, 34, 35, 36, 36, 36, 38, 34, 34, 33, 33, 33, 34, 36, 38, 39, 40, 41, 40, 40, 42, 43, 43, 44, 46, 48, 49, 50, 55, 54, 51, 48, 47, 44, 41, 39, 38, 36, 32, 30, 28, 28, 29, 30, 32, 33, 32, 33, 32, 30, 29, 27, 27, 27, 29, 30, 27, 25, 22, 18, 14, 11, 11, 12, 16, 19, 17, 17, 16, 20, 21, 20, 19, 18, 15, 11, 7, 2, -2, -7, -10, -12, -14, -12, -4, -1, -1, -2, -3, -5, -6, -10, -12, -12, -14, -18, -21, -22, -24, -24, -25, -25, -26, -31, -40, -45, -43, -43, -44, -46, -46, -35, -28, -25, -24, -26, -28, -29, -30, -31, -32, -33, -35, -37, -37, -37, -37, -38, -38, -39, -39, -39, -37, -34, -34, -32, -32, -31, -35, -41, -41, -38, -34, -29, -26, -24, -24, -21, -17, -13, -9, -6, -2, 2, 5, 9, 12, 15, 18, 21, 24, 26, 29, 30, 32, 31, 26, 31, 33, 33, 36, 37, 39, 42, 42, 33, 16, 25, 29, 28, 26, 24, 22, 20, 17, 16, 13, 12, 11, 9, 8, 7, 6, 4, 1, -1, -3, -4, -6, -7, -8, -8, -9, -8, -8, -9, -8, -5, -9, -9, -9, -9, -9, -9, -9,
- /* 33.0 */ -9, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -12, -13, -13, -14, -14, -15, -15, -15, -15, -16, -17, -18, -20, -21, -23, -24, -25, -26, -27, -28, -29, -29, -30, -32, -33, -34, -35, -36, -37, -38, -39, -39, -40, -41, -41, -41, -41, -42, -41, -41, -41, -40, -38, -38, -37, -33, -34, -34, -33, -32, -31, -29, -28, -26, -24, -24, -22, -22, -24, -22, -25, -27, -30, -30, -30, -28, -27, -28, -28, -27, -27, -27, -28, -29, -30, -30, -30, -30, -29, -29, -31, -33, -34, -36, -39, -40, -44, -48, -50, -51, -51, -50, -49, -47, -46, -44, -42, -40, -38, -38, -36, -35, -35, -34, -32, -31, -29, -27, -25, -22, -18, -16, -12, -9, -5, -1, 3, 6, 10, 14, 17, 21, 25, 28, 30, 32, 33, 34, 36, 37, 38, 39, 39, 40, 38, 38, 38, 37, 35, 35, 35, 36, 40, 43, 45, 48, 45, 43, 41, 42, 42, 41, 39, 46, 48, 51, 52, 55, 52, 52, 50, 48, 45, 42, 40, 39, 36, 32, 30, 29, 29, 31, 33, 33, 33, 32, 31, 30, 29, 28, 27, 27, 28, 28, 29, 23, 14, 10, 7, 7, 7, 9, 12, 14, 15, 16, 16, 20, 24, 24, 21, 19, 17, 13, 8, 3, -1, -4, -5, -3, -3, -0, 4, 3, 1, -1, -4, -5, -8, -10, -12, -12, -14, -19, -21, -21, -21, -23, -24, -23, -26, -29, -37, -45, -47, -47, -45, -40, -34, -27, -23, -24, -25, -27, -29, -30, -31, -32, -33, -34, -36, -37, -38, -38, -38, -39, -39, -40, -40, -40, -37, -36, -35, -34, -34, -33, -34, -38, -39, -36, -34, -31, -28, -26, -23, -21, -18, -15, -11, -6, -2, 1, 5, 8, 11, 15, 18, 21, 24, 26, 28, 31, 32, 33, 31, 34, 35, 34, 34, 36, 37, 41, 43, 34, 15, 24, 28, 27, 25, 23, 21, 18, 16, 14, 13, 10, 9, 7, 6, 5, 5, 3, 0, -2, -4, -6, -7, -8, -9, -9, -9, -9, -10, -10, -7, -9, -9, -9, -9, -9, -9, -9, -9,
- /* 34.0 */ -10, -10, -9, -10, -10, -11, -12, -12, -12, -12, -13, -13, -12, -12, -12, -12, -12, -13, -13, -14, -14, -15, -15, -16, -16, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -29, -29, -31, -32, -32, -34, -35, -36, -37, -38, -39, -40, -40, -41, -41, -41, -41, -41, -41, -41, -41, -40, -39, -37, -37, -34, -32, -32, -33, -31, -30, -29, -26, -24, -23, -22, -23, -21, -23, -24, -24, -26, -28, -29, -30, -27, -27, -29, -30, -29, -28, -27, -28, -27, -28, -28, -29, -30, -30, -31, -31, -31, -32, -34, -36, -39, -40, -41, -47, -48, -48, -49, -48, -47, -46, -45, -43, -42, -40, -38, -37, -35, -34, -33, -32, -30, -29, -28, -25, -22, -20, -16, -13, -10, -6, -3, 1, 4, 8, 11, 15, 18, 22, 26, 29, 32, 35, 36, 38, 39, 40, 41, 41, 42, 42, 42, 42, 40, 38, 38, 38, 38, 38, 40, 42, 43, 44, 46, 45, 43, 42, 41, 40, 37, 38, 43, 45, 46, 48, 52, 51, 51, 50, 48, 46, 45, 42, 39, 34, 31, 29, 30, 32, 33, 34, 33, 33, 32, 32, 31, 29, 28, 26, 25, 23, 19, 13, 9, 9, 6, 1, 1, 5, 8, 10, 13, 14, 15, 18, 28, 26, 22, 20, 18, 14, 10, 6, 1, 0, 4, 5, 5, 6, 6, 4, -1, -3, -5, -7, -10, -11, -12, -14, -17, -20, -21, -20, -20, -21, -22, -22, -23, -28, -35, -42, -48, -44, -38, -32, -25, -25, -23, -24, -25, -26, -28, -30, -32, -34, -34, -36, -37, -38, -39, -39, -40, -41, -41, -41, -41, -40, -39, -38, -36, -36, -36, -36, -36, -38, -38, -36, -35, -33, -28, -25, -23, -21, -19, -15, -11, -7, -3, 1, 5, 8, 11, 14, 18, 21, 24, 26, 28, 30, 31, 32, 32, 34, 37, 37, 40, 36, 37, 40, 39, 25, 11, 23, 27, 25, 24, 21, 19, 17, 16, 14, 11, 9, 7, 5, 4, 4, 3, 2, -0, -2, -4, -6, -8, -8, -9, -10, -9, -10, -12, -12, -9, -11, -9, -8, -9, -9, -9, -8, -10,
- /* 35.0 */ -10, -10, -10, -10, -10, -12, -12, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -14, -14, -14, -15, -15, -16, -16, -16, -17, -18, -19, -20, -21, -22, -23, -23, -24, -26, -27, -28, -29, -30, -32, -33, -33, -34, -35, -36, -38, -39, -39, -40, -40, -40, -41, -41, -41, -41, -41, -40, -39, -39, -36, -34, -33, -32, -32, -31, -30, -29, -27, -25, -24, -24, -23, -21, -22, -20, -22, -24, -25, -27, -28, -28, -27, -28, -27, -30, -32, -32, -30, -28, -28, -28, -29, -28, -29, -30, -31, -30, -31, -33, -32, -32, -35, -37, -39, -40, -43, -45, -47, -46, -46, -45, -45, -44, -42, -40, -39, -37, -36, -34, -33, -31, -30, -29, -27, -26, -23, -20, -18, -15, -11, -8, -4, -1, 2, 6, 9, 13, 16, 20, 23, 27, 30, 34, 37, 39, 41, 42, 43, 44, 45, 44, 45, 46, 44, 43, 43, 42, 41, 41, 40, 41, 42, 44, 47, 48, 46, 46, 48, 47, 44, 43, 41, 41, 40, 40, 44, 48, 50, 50, 50, 50, 49, 47, 44, 42, 37, 36, 37, 38, 37, 37, 36, 36, 36, 34, 34, 33, 29, 28, 26, 23, 17, 12, 9, 17, 20, 17, 10, 6, 6, 7, 7, 17, 28, 24, 19, 24, 26, 25, 22, 20, 17, 13, 10, 6, 6, 9, 11, 11, 9, 6, 1, -2, -5, -7, -9, -11, -12, -14, -16, -17, -21, -22, -23, -22, -22, -22, -23, -25, -29, -32, -35, -37, -35, -32, -28, -27, -23, -22, -22, -25, -26, -29, -32, -33, -35, -36, -37, -38, -39, -40, -41, -42, -43, -43, -42, -42, -42, -41, -40, -40, -39, -38, -38, -39, -39, -38, -36, -35, -34, -32, -27, -22, -21, -19, -16, -11, -7, -2, 2, 4, 7, 11, 14, 17, 20, 22, 25, 28, 29, 30, 31, 33, 35, 36, 36, 37, 37, 41, 39, 34, 23, 13, 20, 24, 23, 22, 21, 19, 17, 15, 12, 10, 8, 6, 5, 4, 3, 1, -1, -2, -3, -5, -6, -8, -9, -10, -10, -10, -10, -12, -9, -4, -13, -10, -10, -10, -10, -9, -10, -10,
- /* 36.0 */ -11, -11, -11, -12, -12, -12, -13, -13, -13, -14, -14, -14, -14, -14, -13, -13, -13, -14, -14, -15, -15, -15, -16, -16, -17, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -29, -30, -31, -32, -33, -34, -35, -36, -37, -37, -39, -39, -39, -40, -40, -40, -40, -40, -40, -40, -39, -38, -36, -33, -34, -32, -29, -30, -29, -29, -27, -25, -23, -23, -21, -20, -21, -20, -19, -19, -21, -24, -27, -28, -29, -29, -28, -29, -30, -30, -29, -29, -29, -29, -29, -29, -29, -30, -30, -30, -32, -32, -32, -34, -33, -32, -36, -37, -40, -40, -43, -44, -44, -44, -43, -43, -42, -41, -39, -38, -37, -35, -33, -31, -30, -29, -27, -26, -23, -21, -18, -16, -11, -9, -5, -3, 0, 4, 7, 11, 14, 18, 22, 25, 28, 31, 34, 38, 41, 43, 46, 47, 47, 48, 48, 48, 49, 48, 48, 48, 47, 45, 44, 43, 41, 42, 43, 45, 47, 49, 46, 46, 47, 44, 43, 45, 45, 42, 42, 42, 46, 48, 48, 47, 47, 48, 48, 46, 44, 43, 43, 43, 43, 42, 40, 39, 39, 38, 37, 38, 31, 29, 29, 27, 21, 14, 11, 19, 28, 31, 29, 25, 16, 12, 15, 15, 21, 27, 25, 23, 25, 27, 26, 24, 22, 20, 16, 14, 13, 13, 15, 15, 12, 10, 5, 5, 1, -2, -4, -8, -10, -12, -13, -15, -18, -23, -27, -28, -29, -30, -30, -31, -32, -35, -29, -28, -30, -30, -31, -30, -26, -21, -24, -25, -30, -33, -33, -32, -34, -36, -37, -38, -39, -41, -42, -43, -44, -45, -46, -48, -47, -48, -47, -44, -46, -44, -43, -43, -42, -40, -37, -36, -34, -31, -29, -26, -22, -17, -17, -15, -12, -7, -2, 2, 4, 8, 10, 13, 16, 19, 22, 24, 27, 30, 28, 28, 30, 33, 33, 34, 36, 40, 42, 41, 38, 31, 19, 16, 22, 22, 22, 21, 19, 16, 14, 12, 10, 8, 6, 5, 3, 2, 2, 0, -2, -4, -5, -6, -7, -8, -9, -10, -10, -10, -12, -11, -11, -12, -11, -11, -11, -11, -10, -11, -11,
- /* 37.0 */ -12, -12, -12, -13, -12, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -14, -14, -15, -15, -15, -16, -16, -17, -18, -18, -20, -20, -21, -22, -23, -24, -25, -26, -27, -29, -30, -31, -33, -34, -35, -36, -37, -37, -37, -38, -39, -39, -39, -40, -40, -40, -40, -39, -39, -38, -37, -33, -33, -32, -27, -27, -28, -27, -27, -26, -23, -23, -23, -22, -21, -21, -19, -17, -17, -20, -23, -26, -28, -28, -29, -29, -30, -30, -31, -30, -30, -30, -31, -30, -29, -30, -31, -32, -32, -31, -32, -32, -32, -33, -33, -34, -36, -39, -39, -42, -43, -43, -43, -42, -42, -42, -40, -39, -37, -35, -34, -32, -31, -28, -28, -25, -24, -22, -19, -16, -13, -10, -7, -4, -1, 2, 5, 9, 12, 16, 19, 23, 26, 29, 33, 36, 38, 42, 45, 47, 49, 51, 51, 51, 51, 52, 52, 52, 52, 49, 49, 49, 48, 47, 46, 46, 47, 47, 51, 52, 48, 46, 51, 49, 52, 52, 50, 47, 47, 48, 51, 50, 47, 46, 45, 44, 45, 45, 43, 43, 43, 43, 43, 42, 42, 42, 40, 38, 41, 31, 29, 28, 27, 23, 21, 25, 31, 36, 38, 37, 34, 30, 28, 29, 29, 33, 33, 32, 29, 30, 30, 27, 25, 23, 22, 19, 18, 19, 20, 17, 16, 12, 8, 5, -3, -7, -9, -10, -10, -10, -11, -14, -17, -23, -28, -31, -33, -35, -37, -38, -41, -44, -45, -39, -33, -30, -29, -29, -31, -28, -28, -34, -42, -48, -51, -51, -51, -46, -42, -39, -42, -42, -44, -46, -46, -50, -56, -58, -57, -55, -54, -50, -47, -46, -44, -43, -43, -44, -42, -40, -37, -34, -31, -30, -25, -21, -16, -16, -16, -12, -8, -3, 0, 4, 7, 10, 13, 16, 19, 21, 23, 26, 29, 27, 28, 29, 31, 32, 33, 35, 37, 40, 42, 43, 39, 28, 16, 18, 22, 22, 20, 18, 16, 14, 11, 10, 8, 6, 4, 2, 1, 1, -0, -2, -4, -5, -6, -7, -8, -9, -9, -10, -11, -13, -12, -13, -13, -12, -11, -11, -11, -11, -12, -12,
- /* 38.0 */ -13, -12, -13, -13, -13, -13, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -14, -14, -15, -15, -16, -17, -17, -18, -19, -20, -21, -22, -22, -24, -25, -26, -27, -29, -30, -31, -33, -33, -35, -35, -36, -36, -37, -37, -38, -38, -39, -39, -39, -39, -39, -38, -37, -37, -33, -32, -31, -26, -24, -25, -25, -25, -24, -23, -21, -19, -21, -20, -19, -17, -15, -16, -17, -21, -23, -25, -26, -27, -27, -29, -30, -32, -32, -33, -32, -32, -31, -30, -30, -31, -32, -34, -35, -34, -34, -33, -32, -32, -33, -34, -35, -37, -37, -39, -42, -42, -41, -41, -41, -41, -40, -38, -36, -34, -32, -30, -28, -28, -27, -24, -22, -20, -18, -15, -11, -8, -5, -2, 1, 4, 7, 9, 13, 16, 20, 23, 27, 31, 34, 37, 39, 42, 45, 48, 51, 53, 54, 55, 56, 55, 55, 55, 55, 53, 52, 51, 50, 49, 48, 49, 47, 48, 49, 50, 48, 45, 44, 49, 53, 55, 55, 55, 52, 51, 51, 52, 50, 49, 47, 46, 45, 44, 44, 43, 42, 42, 43, 44, 43, 43, 44, 42, 42, 38, 31, 29, 25, 23, 25, 29, 36, 39, 39, 39, 38, 36, 36, 37, 37, 37, 36, 35, 36, 35, 34, 31, 28, 26, 23, 23, 24, 24, 20, 18, 16, 13, 5, -8, -12, -12, -13, -16, -17, -16, -15, -19, -26, -29, -31, -33, -35, -36, -38, -38, -39, -43, -44, -41, -33, -30, -28, -28, -30, -33, -46, -52, -53, -54, -54, -55, -56, -56, -56, -55, -49, -45, -44, -48, -54, -59, -60, -58, -53, -48, -47, -47, -45, -44, -45, -46, -49, -47, -45, -42, -39, -36, -32, -30, -25, -20, -17, -16, -15, -13, -9, -5, -1, 3, 7, 10, 13, 15, 18, 20, 23, 26, 26, 26, 27, 28, 29, 31, 31, 32, 36, 36, 38, 42, 41, 35, 24, 17, 21, 22, 21, 19, 16, 13, 12, 10, 8, 6, 4, 3, 1, -0, -2, -3, -4, -4, -5, -7, -9, -9, -10, -11, -12, -10, -8, -14, -13, -12, -11, -11, -11, -12, -13, -13,
- /* 39.0 */ -13, -12, -13, -13, -13, -13, -13, -12, -12, -12, -12, -11, -11, -12, -12, -12, -12, -13, -13, -13, -14, -14, -15, -15, -16, -17, -17, -18, -19, -21, -22, -22, -23, -24, -26, -27, -28, -30, -31, -32, -33, -34, -34, -35, -35, -36, -36, -37, -37, -37, -37, -37, -37, -37, -36, -36, -34, -30, -30, -27, -24, -25, -24, -22, -22, -21, -21, -20, -18, -18, -20, -18, -17, -14, -14, -16, -20, -22, -24, -25, -26, -27, -28, -30, -32, -33, -33, -33, -33, -33, -32, -32, -32, -33, -35, -35, -35, -34, -35, -34, -32, -33, -34, -33, -35, -36, -37, -37, -39, -40, -39, -38, -38, -38, -37, -36, -33, -32, -31, -27, -27, -25, -24, -22, -19, -16, -13, -10, -7, -3, -0, 2, 5, 8, 11, 14, 17, 20, 24, 27, 30, 33, 36, 39, 43, 45, 49, 52, 54, 56, 57, 58, 58, 58, 57, 56, 55, 54, 52, 51, 51, 49, 49, 49, 48, 49, 50, 51, 49, 49, 53, 54, 55, 55, 54, 54, 54, 53, 53, 52, 50, 49, 49, 47, 46, 45, 44, 44, 45, 46, 44, 43, 43, 43, 43, 43, 44, 37, 30, 29, 27, 28, 33, 38, 40, 40, 40, 40, 39, 40, 40, 39, 37, 37, 36, 36, 36, 34, 31, 30, 29, 28, 27, 26, 24, 21, 18, 14, 11, -0, -12, -17, -17, -18, -21, -20, -19, -21, -24, -27, -29, -31, -33, -34, -36, -37, -38, -36, -35, -36, -36, -35, -33, -30, -30, -36, -47, -51, -52, -51, -51, -54, -57, -59, -60, -62, -63, -63, -63, -58, -55, -55, -56, -56, -52, -51, -49, -47, -46, -48, -52, -52, -52, -51, -48, -45, -42, -39, -36, -32, -28, -25, -19, -16, -14, -13, -12, -9, -5, -1, 2, 6, 10, 13, 15, 17, 20, 23, 24, 23, 25, 25, 26, 28, 30, 31, 31, 33, 35, 37, 39, 41, 38, 25, 15, 20, 22, 21, 20, 18, 16, 13, 11, 9, 7, 5, 4, 2, 0, -1, -3, -4, -5, -6, -7, -9, -9, -10, -11, -13, -15, -13, -14, -13, -12, -12, -12, -12, -13, -13, -13,
- /* 40.0 */ -13, -13, -12, -13, -12, -12, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -12, -12, -13, -13, -13, -13, -14, -15, -16, -16, -17, -18, -20, -21, -22, -22, -24, -25, -26, -28, -28, -30, -30, -31, -32, -33, -34, -34, -35, -35, -36, -36, -36, -37, -37, -36, -36, -35, -34, -31, -28, -28, -23, -23, -23, -23, -21, -20, -19, -19, -19, -18, -16, -18, -17, -16, -13, -12, -17, -19, -21, -23, -24, -25, -26, -27, -28, -30, -32, -33, -33, -33, -33, -33, -33, -33, -34, -35, -34, -34, -34, -35, -35, -34, -33, -35, -35, -35, -34, -34, -35, -35, -35, -35, -34, -34, -34, -34, -34, -33, -31, -30, -29, -27, -25, -23, -21, -18, -15, -12, -9, -6, -2, 1, 4, 7, 10, 13, 16, 19, 23, 26, 29, 32, 35, 38, 41, 43, 46, 49, 52, 55, 57, 59, 59, 59, 60, 59, 58, 57, 56, 54, 54, 52, 51, 52, 51, 49, 48, 47, 46, 46, 46, 49, 54, 56, 55, 55, 54, 52, 52, 53, 52, 51, 50, 48, 49, 48, 45, 45, 44, 46, 48, 46, 44, 44, 44, 45, 46, 45, 38, 39, 34, 34, 36, 40, 40, 41, 40, 40, 40, 39, 38, 39, 39, 38, 37, 35, 34, 32, 30, 29, 30, 29, 29, 27, 26, 22, 20, 19, 11, 3, -8, -16, -21, -18, -15, -16, -15, -18, -21, -24, -26, -28, -30, -33, -34, -35, -36, -37, -38, -39, -41, -41, -42, -40, -39, -35, -35, -41, -45, -46, -50, -56, -60, -62, -62, -64, -66, -67, -67, -66, -66, -67, -66, -64, -63, -62, -59, -56, -55, -57, -57, -55, -54, -53, -50, -47, -45, -43, -40, -36, -32, -29, -25, -20, -16, -13, -11, -10, -8, -4, -1, 3, 5, 8, 11, 14, 17, 20, 24, 24, 23, 23, 24, 25, 26, 29, 30, 31, 31, 33, 34, 38, 40, 37, 24, 15, 17, 21, 21, 20, 18, 17, 15, 12, 10, 8, 6, 5, 3, 1, -0, -2, -3, -4, -6, -7, -8, -9, -10, -11, -13, -11, -15, -13, -12, -11, -12, -12, -13, -13, -12, -13,
- /* 41.0 */ -12, -12, -12, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -12, -12, -12, -13, -14, -15, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30, -31, -31, -32, -33, -33, -33, -33, -33, -32, -32, -32, -32, -32, -33, -30, -25, -25, -23, -22, -21, -20, -19, -18, -17, -17, -17, -17, -14, -13, -14, -16, -12, -11, -15, -18, -20, -21, -22, -23, -24, -26, -27, -28, -30, -32, -32, -33, -33, -33, -33, -33, -34, -35, -34, -36, -35, -34, -34, -35, -33, -34, -34, -33, -34, -32, -31, -32, -32, -31, -31, -29, -28, -30, -31, -30, -29, -28, -27, -26, -24, -21, -19, -16, -13, -10, -7, -4, -1, 3, 7, 9, 12, 16, 19, 21, 24, 27, 30, 34, 37, 40, 42, 45, 47, 50, 53, 55, 58, 59, 61, 61, 60, 60, 59, 58, 57, 56, 56, 54, 52, 52, 51, 51, 50, 49, 48, 48, 48, 49, 55, 56, 56, 56, 55, 54, 54, 53, 51, 50, 50, 49, 48, 46, 46, 45, 45, 46, 48, 47, 46, 46, 47, 48, 48, 48, 46, 40, 35, 37, 43, 44, 43, 42, 41, 41, 39, 38, 37, 36, 36, 36, 35, 34, 31, 28, 26, 25, 24, 24, 24, 25, 26, 23, 18, 11, 5, 5, -6, -16, -16, -11, -12, -13, -14, -17, -21, -25, -27, -28, -30, -32, -33, -34, -36, -37, -40, -42, -44, -41, -45, -49, -44, -38, -34, -34, -33, -35, -44, -54, -59, -61, -63, -65, -66, -65, -64, -62, -62, -62, -64, -63, -61, -61, -60, -58, -56, -56, -56, -56, -55, -53, -50, -48, -46, -42, -40, -38, -33, -28, -24, -21, -17, -14, -11, -8, -7, -3, 1, 3, 5, 7, 10, 14, 18, 21, 24, 26, 27, 24, 23, 24, 25, 26, 27, 28, 30, 30, 32, 35, 36, 29, 17, 11, 10, 16, 19, 19, 18, 17, 16, 14, 12, 10, 7, 6, 4, 2, 1, -1, -3, -4, -5, -6, -7, -8, -9, -11, -12, -7, -8, -13, -11, -11, -12, -12, -12, -12, -12, -12,
- /* 42.0 */ -11, -11, -11, -11, -11, -10, -10, -9, -9, -9, -9, -9, -9, -8, -8, -9, -9, -10, -10, -10, -10, -11, -11, -12, -13, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30, -30, -31, -31, -32, -32, -32, -31, -31, -31, -31, -30, -30, -30, -27, -24, -23, -21, -20, -19, -18, -17, -16, -15, -15, -15, -15, -14, -14, -14, -14, -13, -12, -14, -18, -19, -19, -21, -22, -24, -25, -25, -28, -29, -28, -32, -32, -33, -33, -34, -34, -34, -34, -34, -35, -36, -36, -35, -35, -33, -32, -33, -33, -31, -32, -30, -30, -29, -28, -28, -27, -26, -25, -27, -26, -26, -26, -26, -24, -23, -20, -17, -13, -10, -8, -6, -1, 4, 5, 9, 12, 15, 18, 21, 24, 26, 29, 32, 35, 38, 42, 44, 46, 48, 51, 53, 56, 58, 60, 62, 61, 61, 61, 60, 60, 59, 58, 57, 57, 55, 54, 54, 53, 51, 51, 50, 51, 52, 53, 56, 56, 57, 57, 54, 54, 54, 52, 50, 50, 50, 51, 50, 47, 47, 46, 46, 46, 51, 47, 48, 48, 49, 48, 46, 47, 44, 39, 37, 41, 45, 44, 45, 43, 41, 40, 40, 38, 34, 30, 28, 27, 28, 29, 27, 25, 22, 20, 19, 19, 18, 20, 20, 19, 14, 12, 9, -1, -8, -11, -12, -11, -12, -14, -17, -20, -23, -25, -27, -28, -29, -31, -33, -34, -35, -39, -41, -43, -43, -40, -36, -38, -37, -36, -35, -37, -38, -38, -38, -39, -44, -52, -56, -56, -57, -60, -63, -62, -64, -63, -62, -63, -63, -63, -61, -58, -56, -56, -56, -55, -54, -53, -50, -48, -46, -43, -40, -36, -33, -29, -26, -23, -19, -16, -11, -7, -5, -2, 0, 2, 4, 6, 8, 13, 18, 21, 23, 25, 26, 25, 23, 23, 24, 25, 26, 27, 28, 29, 30, 35, 33, 22, 21, 15, 11, 9, 10, 14, 16, 17, 16, 15, 13, 11, 9, 7, 5, 3, 2, -0, -1, -3, -4, -5, -6, -7, -8, -9, -12, -10, -11, -13, -11, -11, -11, -12, -12, -11, -11, -11,
- /* 43.0 */ -10, -10, -9, -9, -9, -9, -8, -8, -7, -7, -7, -7, -7, -7, -7, -7, -8, -8, -8, -8, -9, -9, -10, -11, -11, -12, -12, -13, -14, -16, -17, -18, -19, -20, -21, -22, -22, -23, -24, -25, -26, -27, -28, -29, -30, -30, -30, -30, -31, -30, -30, -30, -29, -29, -29, -29, -24, -23, -21, -20, -19, -18, -18, -16, -16, -15, -14, -13, -12, -11, -10, -10, -14, -12, -14, -15, -15, -18, -19, -21, -24, -26, -27, -26, -27, -29, -29, -30, -31, -32, -34, -35, -35, -35, -34, -34, -34, -35, -36, -36, -37, -36, -35, -35, -34, -32, -32, -29, -28, -27, -27, -27, -26, -24, -25, -23, -22, -22, -21, -21, -20, -20, -18, -14, -10, -8, -7, -2, 4, 10, 13, 16, 17, 19, 20, 23, 26, 29, 31, 34, 37, 40, 43, 45, 47, 50, 52, 54, 56, 59, 61, 62, 62, 62, 62, 62, 62, 62, 61, 60, 58, 58, 58, 57, 56, 53, 51, 52, 55, 53, 54, 55, 57, 56, 56, 55, 54, 51, 50, 51, 52, 52, 51, 50, 50, 49, 48, 46, 46, 47, 49, 49, 48, 47, 43, 43, 43, 43, 43, 44, 46, 45, 44, 44, 42, 41, 40, 38, 36, 31, 29, 28, 26, 23, 21, 20, 19, 20, 18, 15, 17, 22, 23, 22, 17, 12, 5, -1, -6, -8, -9, -10, -12, -14, -17, -19, -20, -23, -25, -27, -28, -29, -32, -32, -34, -37, -39, -41, -42, -42, -40, -41, -41, -42, -44, -43, -42, -41, -42, -44, -47, -46, -48, -49, -51, -48, -49, -53, -62, -65, -63, -64, -64, -62, -57, -57, -60, -57, -56, -55, -53, -52, -50, -49, -46, -44, -43, -40, -38, -34, -31, -28, -25, -22, -18, -13, -8, -4, -2, -1, 1, 3, 5, 8, 11, 15, 19, 21, 22, 24, 25, 25, 26, 26, 27, 26, 26, 27, 28, 29, 32, 33, 30, 31, 28, 28, 21, 11, 3, 6, 12, 15, 14, 14, 12, 11, 9, 7, 5, 3, 1, 0, -2, -3, -5, -5, -6, -7, -8, -11, -8, -10, -11, -9, -10, -11, -11, -10, -10, -10, -10,
- /* 44.0 */ -8, -8, -8, -7, -7, -6, -6, -6, -6, -6, -5, -5, -5, -5, -5, -5, -5, -6, -6, -6, -7, -7, -8, -9, -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -28, -29, -29, -29, -29, -29, -29, -28, -28, -28, -29, -28, -23, -22, -21, -19, -18, -18, -17, -17, -15, -13, -11, -11, -11, -9, -8, -10, -13, -10, -15, -15, -13, -17, -20, -23, -25, -25, -26, -26, -27, -28, -29, -29, -31, -33, -36, -37, -36, -36, -34, -34, -36, -35, -36, -36, -37, -37, -37, -36, -34, -31, -29, -29, -28, -27, -27, -26, -24, -24, -23, -23, -23, -21, -19, -18, -15, -13, -12, -11, -9, -7, -3, 3, 8, 12, 16, 17, 18, 20, 23, 25, 28, 30, 33, 35, 38, 40, 44, 46, 48, 51, 53, 55, 57, 59, 61, 63, 64, 64, 64, 64, 63, 63, 63, 61, 60, 58, 58, 58, 56, 55, 55, 53, 50, 47, 47, 51, 51, 49, 48, 50, 46, 47, 49, 49, 49, 49, 51, 52, 51, 50, 51, 52, 49, 46, 46, 45, 42, 41, 42, 43, 44, 46, 47, 46, 45, 44, 43, 40, 40, 39, 37, 36, 35, 33, 32, 29, 25, 22, 20, 17, 17, 15, 13, 16, 21, 20, 18, 14, 7, 2, -2, -5, -7, -9, -11, -12, -13, -15, -16, -18, -20, -23, -25, -27, -29, -30, -32, -34, -36, -37, -38, -39, -38, -39, -41, -42, -44, -44, -45, -45, -46, -47, -47, -49, -49, -51, -51, -52, -52, -56, -61, -66, -64, -60, -61, -60, -58, -59, -60, -62, -58, -56, -54, -53, -52, -51, -49, -47, -46, -44, -42, -40, -37, -35, -32, -28, -25, -22, -18, -14, -10, -6, -4, -2, 0, 2, 4, 7, 9, 13, 16, 19, 20, 22, 25, 25, 24, 25, 25, 27, 27, 26, 27, 28, 30, 31, 31, 32, 31, 31, 31, 30, 19, 2, -3, 2, 9, 11, 12, 11, 10, 8, 6, 4, 3, 2, -0, -1, -3, -4, -5, -5, -8, -11, -8, -11, -10, -9, -9, -10, -9, -9, -9, -8, -8,
- /* 45.0 */ -6, -6, -6, -6, -5, -5, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -3, -3, -4, -4, -5, -6, -7, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -24, -25, -26, -26, -27, -27, -28, -28, -28, -27, -26, -27, -26, -27, -27, -27, -23, -22, -20, -20, -19, -17, -16, -15, -15, -14, -13, -11, -9, -9, -7, -12, -11, -14, -15, -15, -15, -17, -20, -22, -23, -24, -25, -25, -27, -27, -28, -28, -31, -31, -34, -36, -37, -37, -36, -35, -36, -37, -37, -37, -37, -36, -35, -34, -34, -32, -30, -30, -28, -27, -26, -26, -25, -24, -23, -22, -21, -20, -18, -17, -15, -13, -10, -7, -4, -2, 3, 6, 10, 14, 17, 19, 21, 23, 26, 28, 30, 32, 34, 37, 39, 42, 44, 46, 49, 51, 53, 55, 57, 60, 61, 63, 65, 65, 65, 65, 64, 64, 63, 62, 61, 59, 59, 59, 59, 57, 55, 56, 54, 53, 51, 48, 46, 46, 45, 45, 44, 47, 48, 47, 47, 49, 51, 53, 53, 51, 52, 53, 45, 42, 39, 41, 43, 43, 44, 46, 46, 46, 46, 45, 44, 43, 43, 42, 38, 37, 34, 32, 33, 32, 31, 29, 27, 26, 26, 22, 18, 16, 14, 13, 13, 13, 11, 8, 4, 1, -2, -4, -6, -9, -11, -12, -14, -16, -18, -20, -22, -24, -26, -28, -29, -30, -32, -33, -35, -37, -38, -38, -39, -41, -42, -43, -44, -44, -45, -47, -48, -50, -49, -45, -40, -44, -52, -56, -58, -63, -66, -67, -65, -61, -59, -57, -57, -57, -56, -53, -53, -51, -49, -49, -49, -49, -47, -47, -46, -44, -42, -40, -37, -34, -32, -29, -26, -22, -18, -15, -12, -8, -5, -2, 0, 2, 4, 6, 8, 11, 14, 16, 18, 20, 23, 24, 23, 24, 25, 29, 30, 26, 26, 27, 28, 29, 28, 28, 27, 26, 26, 26, 28, 24, 14, 1, -4, 3, 10, 12, 11, 10, 8, 6, 5, 3, 2, -0, -2, -3, -4, -5, -7, -10, -3, -10, -9, -8, -9, -7, -8, -7, -7, -7, -6,
- /* 46.0 */ -5, -4, -4, -3, -3, -3, -2, -2, -2, -1, -1, -1, -0, -0, -1, -1, -0, -0, -1, -1, -2, -3, -4, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -20, -21, -22, -23, -24, -25, -25, -26, -26, -26, -26, -25, -25, -25, -25, -25, -26, -26, -23, -20, -20, -20, -20, -21, -18, -16, -16, -15, -13, -12, -12, -11, -11, -13, -14, -15, -16, -16, -16, -16, -19, -21, -22, -24, -25, -26, -27, -27, -27, -28, -28, -30, -31, -32, -34, -35, -36, -36, -37, -38, -38, -38, -37, -37, -36, -35, -34, -33, -33, -32, -29, -28, -26, -25, -25, -24, -22, -20, -19, -18, -17, -15, -13, -12, -9, -6, -2, 1, 4, 7, 10, 14, 18, 20, 24, 26, 29, 29, 31, 33, 35, 38, 40, 42, 45, 47, 49, 52, 53, 55, 57, 60, 61, 63, 65, 66, 66, 66, 65, 64, 63, 61, 61, 61, 60, 59, 59, 57, 55, 54, 52, 50, 49, 48, 47, 47, 47, 46, 48, 49, 48, 48, 48, 49, 50, 50, 50, 49, 49, 51, 52, 48, 49, 49, 48, 45, 47, 47, 46, 45, 45, 45, 44, 43, 42, 42, 41, 39, 37, 32, 31, 31, 29, 27, 25, 23, 22, 20, 17, 15, 13, 12, 11, 9, 7, 6, 3, 1, -1, -4, -6, -8, -10, -12, -15, -16, -18, -20, -22, -24, -26, -27, -29, -30, -31, -33, -35, -36, -37, -38, -39, -41, -41, -42, -43, -44, -44, -46, -48, -50, -51, -51, -51, -50, -52, -51, -51, -56, -60, -61, -60, -58, -54, -53, -51, -50, -49, -52, -50, -49, -49, -49, -48, -46, -45, -45, -44, -42, -41, -39, -36, -34, -32, -28, -25, -22, -19, -16, -13, -11, -7, -3, 0, 2, 4, 5, 7, 10, 12, 14, 17, 19, 20, 21, 22, 22, 24, 27, 29, 29, 26, 25, 26, 26, 26, 26, 24, 23, 23, 23, 23, 24, 25, 24, 17, 7, 4, 10, 12, 12, 10, 9, 7, 5, 3, 1, -1, -2, -3, -4, -7, -4, -5, -9, -7, -6, -6, -6, -6, -6, -5, -5, -5,
- /* 47.0 */ -3, -3, -2, -1, -1, -1, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 0, -0, -1, -2, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -13, -14, -15, -16, -18, -19, -20, -21, -22, -22, -23, -24, -24, -24, -24, -23, -23, -23, -24, -24, -25, -24, -23, -21, -20, -18, -20, -20, -19, -17, -16, -15, -14, -13, -13, -12, -12, -12, -14, -15, -16, -16, -16, -17, -19, -21, -22, -24, -25, -26, -27, -28, -29, -30, -29, -31, -32, -33, -35, -36, -37, -37, -37, -37, -37, -37, -37, -37, -37, -36, -35, -34, -33, -31, -29, -28, -28, -26, -24, -22, -21, -20, -19, -18, -17, -15, -14, -11, -8, -4, -0, 3, 6, 8, 11, 15, 17, 21, 25, 28, 32, 35, 36, 35, 36, 38, 41, 44, 46, 48, 50, 52, 54, 56, 57, 60, 62, 63, 65, 66, 66, 66, 65, 64, 62, 62, 62, 61, 60, 59, 58, 57, 56, 55, 53, 50, 50, 50, 49, 48, 48, 50, 50, 49, 49, 48, 48, 48, 48, 48, 48, 48, 50, 49, 48, 48, 49, 50, 50, 49, 48, 48, 47, 45, 45, 44, 43, 42, 42, 41, 39, 39, 36, 33, 33, 31, 29, 28, 25, 24, 22, 21, 20, 18, 15, 14, 11, 9, 7, 5, 2, -1, -4, -6, -8, -11, -14, -15, -16, -18, -19, -20, -21, -22, -23, -25, -27, -29, -30, -32, -34, -35, -35, -36, -37, -39, -39, -41, -42, -43, -44, -45, -46, -47, -47, -48, -49, -49, -49, -48, -47, -47, -48, -53, -54, -51, -47, -43, -45, -47, -49, -49, -48, -47, -46, -45, -44, -43, -44, -44, -43, -42, -40, -38, -35, -33, -31, -28, -26, -23, -20, -17, -15, -12, -8, -4, -1, 2, 4, 5, 7, 9, 12, 13, 16, 18, 19, 20, 20, 21, 23, 25, 26, 28, 27, 25, 24, 24, 25, 25, 22, 21, 20, 21, 21, 21, 22, 23, 25, 24, 16, 4, 10, 12, 12, 10, 9, 7, 5, 3, 1, 0, -1, -3, -7, -3, -4, -6, -5, -4, -5, -5, -4, -4, -4, -3, -3,
- /* 48.0 */ -1, -0, -0, 1, 1, 1, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 2, 1, 1, -0, -1, -2, -3, -4, -4, -5, -7, -8, -9, -10, -11, -12, -14, -15, -16, -17, -18, -19, -20, -21, -21, -22, -22, -22, -22, -22, -22, -22, -23, -23, -23, -20, -20, -22, -18, -18, -18, -17, -17, -16, -15, -15, -13, -14, -14, -15, -15, -16, -16, -17, -17, -18, -18, -18, -21, -22, -24, -25, -27, -27, -28, -29, -31, -32, -31, -33, -35, -35, -36, -37, -37, -37, -37, -38, -38, -38, -38, -38, -36, -35, -33, -33, -32, -30, -28, -28, -27, -24, -22, -21, -20, -19, -18, -17, -16, -14, -9, -4, -2, 2, 5, 8, 9, 13, 17, 21, 25, 27, 29, 32, 35, 36, 36, 37, 40, 42, 44, 46, 49, 51, 52, 54, 56, 58, 60, 62, 63, 65, 66, 65, 65, 64, 63, 63, 63, 62, 62, 61, 60, 58, 57, 56, 55, 54, 53, 52, 52, 53, 54, 52, 51, 51, 50, 49, 48, 47, 46, 46, 46, 46, 47, 48, 49, 49, 48, 47, 46, 45, 45, 45, 46, 46, 44, 44, 44, 43, 41, 40, 39, 38, 36, 34, 34, 33, 31, 30, 28, 25, 24, 22, 21, 20, 18, 16, 14, 12, 9, 7, 4, 1, -3, -5, -9, -12, -13, -14, -16, -17, -18, -19, -20, -22, -21, -20, -22, -24, -27, -29, -31, -33, -33, -33, -34, -35, -36, -38, -40, -41, -41, -42, -43, -43, -43, -43, -43, -45, -46, -47, -50, -51, -51, -51, -49, -46, -43, -42, -44, -48, -49, -49, -48, -47, -46, -44, -44, -44, -44, -44, -43, -43, -41, -40, -37, -34, -32, -30, -28, -26, -23, -21, -18, -16, -13, -9, -6, -2, 2, 3, 5, 7, 9, 11, 14, 16, 17, 18, 19, 19, 20, 21, 22, 23, 25, 26, 26, 24, 22, 24, 23, 22, 22, 20, 20, 20, 20, 20, 21, 21, 24, 25, 15, 2, 7, 10, 10, 9, 8, 6, 5, 3, 2, 1, -2, -4, -0, -6, -3, -2, -3, -2, -2, -2, -2, -2, -2, -1,
- /* 49.0 */ 0, 1, 1, 2, 2, 3, 4, 4, 5, 6, 6, 6, 6, 7, 7, 7, 7, 6, 6, 5, 5, 5, 4, 3, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -11, -12, -13, -14, -16, -17, -18, -18, -19, -19, -20, -20, -20, -21, -21, -22, -21, -20, -17, -17, -21, -19, -17, -16, -16, -16, -16, -15, -15, -15, -14, -15, -15, -16, -16, -17, -17, -17, -18, -19, -19, -20, -21, -22, -23, -25, -27, -28, -29, -31, -32, -33, -34, -35, -36, -37, -38, -38, -39, -39, -38, -38, -39, -39, -39, -39, -38, -37, -36, -35, -34, -33, -30, -27, -27, -26, -24, -20, -19, -20, -20, -18, -16, -14, -10, -3, 2, 5, 7, 9, 12, 15, 22, 24, 22, 23, 26, 29, 33, 35, 37, 39, 41, 43, 45, 47, 50, 52, 53, 55, 56, 58, 60, 62, 64, 65, 65, 64, 64, 64, 63, 63, 63, 62, 61, 60, 59, 58, 57, 56, 56, 58, 58, 58, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 45, 45, 47, 47, 48, 48, 48, 48, 47, 46, 47, 47, 46, 46, 43, 43, 43, 43, 41, 39, 37, 33, 32, 34, 34, 33, 31, 28, 26, 23, 23, 21, 19, 17, 15, 13, 10, 10, 9, 7, 5, 1, -3, -5, -7, -9, -12, -14, -15, -16, -16, -16, -19, -21, -22, -20, -19, -22, -24, -27, -29, -31, -31, -31, -32, -33, -34, -35, -37, -38, -39, -40, -40, -40, -40, -40, -42, -44, -45, -45, -46, -47, -44, -44, -42, -41, -42, -43, -44, -46, -47, -46, -46, -45, -45, -45, -44, -43, -43, -42, -42, -41, -40, -39, -37, -34, -32, -30, -28, -25, -23, -21, -19, -16, -13, -10, -7, -3, 0, 3, 5, 7, 9, 11, 13, 14, 16, 16, 18, 19, 20, 20, 21, 21, 23, 24, 24, 23, 21, 22, 22, 21, 21, 20, 20, 20, 20, 21, 21, 21, 22, 25, 25, 12, 1, 4, 8, 9, 9, 8, 7, 5, 4, 2, -1, 1, 1, -2, 0, 0, -0, -0, 0, -0, 0, 0, 0, 0,
- /* 50.0 */ -6, -6, -5, -4, -2, -1, 1, 2, 3, 5, 5, 7, 7, 8, 8, 9, 9, 8, 8, 8, 7, 7, 7, 6, 5, 5, 4, 3, 2, 1, -0, -1, -2, -3, -4, -5, -7, -8, -9, -10, -12, -13, -14, -15, -16, -17, -17, -17, -18, -18, -18, -20, -20, -16, -15, -17, -17, -17, -17, -16, -16, -16, -16, -16, -15, -14, -16, -17, -18, -17, -17, -17, -17, -19, -19, -19, -20, -20, -21, -23, -24, -25, -27, -28, -29, -30, -31, -33, -34, -35, -35, -36, -38, -39, -39, -40, -40, -39, -39, -39, -40, -40, -40, -39, -38, -36, -35, -33, -31, -29, -26, -25, -24, -24, -23, -23, -21, -19, -18, -16, -13, -10, -5, 1, 4, 8, 11, 13, 16, 22, 24, 23, 23, 26, 29, 32, 35, 38, 40, 42, 45, 47, 49, 51, 53, 54, 56, 57, 59, 61, 62, 63, 64, 64, 64, 63, 63, 63, 63, 63, 62, 61, 60, 58, 58, 57, 56, 57, 57, 59, 58, 58, 56, 55, 54, 53, 52, 50, 48, 46, 45, 45, 45, 45, 46, 47, 48, 49, 48, 48, 48, 47, 47, 47, 46, 45, 44, 44, 43, 42, 40, 37, 35, 33, 31, 32, 32, 32, 31, 29, 27, 25, 23, 21, 19, 16, 14, 12, 11, 11, 11, 10, 8, 5, 3, 0, -5, -7, -8, -10, -12, -14, -15, -15, -16, -17, -20, -21, -18, -17, -19, -22, -24, -26, -28, -29, -29, -30, -31, -32, -33, -34, -35, -35, -36, -38, -39, -40, -42, -44, -45, -45, -45, -44, -43, -43, -41, -41, -40, -41, -42, -42, -45, -46, -46, -46, -45, -43, -43, -42, -42, -41, -41, -40, -40, -40, -39, -37, -34, -32, -30, -27, -25, -23, -21, -19, -16, -14, -11, -8, -5, -1, 3, 5, 7, 9, 11, 12, 12, 13, 15, 17, 19, 20, 21, 21, 20, 21, 22, 23, 22, 21, 21, 22, 21, 19, 19, 19, 19, 20, 20, 21, 21, 22, 22, 24, 24, 16, 5, 2, 6, 8, 8, 8, 7, 5, 4, 3, 4, 1, 3, 2, 2, 1, 1, 1, 1, -1, -3, -5, -6,
- /* 51.0 */ -8, -6, -7, -8, -10, -11, -11, -10, -7, -5, -2, 2, 5, 8, 9, 10, 10, 10, 10, 10, 10, 10, 9, 8, 7, 7, 6, 5, 4, 3, 3, 2, 1, -0, -1, -3, -3, -5, -6, -8, -9, -10, -11, -13, -14, -14, -15, -15, -16, -17, -17, -16, -15, -15, -15, -15, -14, -14, -15, -15, -16, -16, -16, -16, -14, -13, -17, -18, -19, -19, -19, -20, -20, -21, -21, -21, -21, -22, -23, -25, -27, -28, -30, -31, -31, -32, -33, -34, -35, -36, -37, -38, -39, -40, -40, -40, -41, -42, -41, -41, -42, -42, -41, -39, -37, -36, -34, -33, -32, -29, -26, -24, -22, -21, -20, -19, -18, -17, -15, -13, -10, -8, -5, -2, 3, 9, 11, 14, 16, 20, 24, 24, 25, 27, 31, 34, 36, 39, 41, 43, 45, 48, 50, 52, 53, 55, 57, 58, 59, 61, 62, 63, 63, 63, 63, 63, 63, 63, 63, 62, 62, 60, 59, 58, 57, 59, 60, 58, 59, 60, 59, 58, 56, 55, 54, 54, 53, 51, 48, 46, 45, 45, 44, 45, 45, 45, 46, 47, 48, 48, 47, 46, 46, 44, 44, 43, 42, 41, 39, 38, 37, 36, 34, 31, 30, 30, 30, 30, 28, 25, 25, 25, 23, 20, 18, 16, 14, 13, 12, 11, 10, 9, 7, 6, 5, 3, -1, -4, -6, -8, -10, -11, -13, -14, -15, -17, -18, -18, -16, -16, -18, -20, -23, -24, -26, -27, -27, -28, -29, -30, -31, -32, -33, -35, -36, -38, -39, -40, -41, -42, -43, -43, -42, -42, -41, -41, -41, -40, -40, -40, -41, -42, -43, -43, -43, -43, -43, -43, -42, -40, -40, -39, -38, -38, -38, -38, -39, -37, -34, -32, -29, -27, -25, -23, -21, -19, -16, -14, -11, -8, -5, -2, 2, 4, 6, 8, 9, 10, 11, 12, 14, 16, 17, 18, 20, 20, 20, 19, 20, 21, 21, 20, 19, 20, 18, 17, 17, 18, 18, 18, 19, 19, 20, 22, 23, 23, 25, 25, 20, 6, 1, 5, 7, 8, 8, 8, 6, 6, 6, 5, 4, 3, 1, -1, -4, -5, -9, -10, -8, -5, -8,
- /* 52.0 */ 4, 2, 4, 5, 7, 8, 7, 6, 6, 3, 2, -2, -3, -0, 2, 6, 8, 10, 11, 11, 11, 11, 11, 10, 10, 9, 9, 8, 7, 7, 6, 5, 4, 2, 1, 0, -1, -2, -4, -5, -7, -8, -9, -10, -11, -12, -12, -13, -14, -13, -14, -14, -14, -14, -13, -12, -13, -14, -14, -14, -15, -15, -15, -13, -12, -15, -18, -19, -20, -20, -20, -20, -21, -22, -22, -22, -23, -24, -24, -27, -30, -31, -32, -33, -33, -33, -34, -35, -36, -37, -39, -41, -42, -43, -43, -42, -43, -43, -43, -43, -44, -43, -42, -40, -39, -36, -34, -33, -31, -30, -28, -26, -23, -20, -18, -17, -16, -15, -13, -10, -8, -5, -1, 2, 4, 9, 12, 15, 17, 21, 22, 24, 26, 29, 32, 34, 36, 39, 42, 45, 47, 49, 50, 52, 54, 56, 57, 58, 60, 61, 61, 62, 62, 62, 62, 62, 62, 62, 62, 61, 61, 59, 58, 57, 58, 61, 61, 60, 60, 59, 58, 58, 56, 56, 55, 54, 54, 52, 49, 48, 46, 45, 45, 44, 44, 43, 44, 44, 45, 45, 44, 44, 43, 42, 41, 40, 39, 37, 35, 33, 33, 32, 30, 29, 28, 28, 27, 26, 24, 21, 22, 23, 21, 20, 18, 16, 14, 13, 12, 11, 10, 8, 7, 7, 6, 4, 2, -0, -1, -3, -4, -6, -7, -8, -9, -12, -14, -14, -13, -13, -16, -18, -21, -23, -25, -25, -25, -26, -27, -28, -29, -30, -31, -33, -34, -36, -37, -39, -40, -41, -41, -41, -42, -43, -44, -43, -43, -42, -41, -39, -39, -40, -41, -42, -43, -41, -40, -40, -39, -38, -37, -37, -38, -38, -39, -40, -39, -36, -34, -32, -30, -27, -25, -23, -21, -19, -16, -14, -12, -9, -7, -4, -0, 2, 4, 6, 7, 8, 9, 11, 12, 14, 16, 18, 19, 19, 18, 18, 19, 20, 20, 19, 19, 18, 18, 16, 16, 17, 18, 19, 19, 20, 20, 21, 22, 23, 24, 24, 24, 12, 2, -1, 3, 7, 8, 9, 9, 8, 6, 3, 1, -3, -6, -2, 1, 5, 6, 4, 6, 6, 4,
- /* 53.0 */ 5, 2, 2, 2, 3, 3, 5, 6, 8, 10, 13, 14, 14, 10, 4, 0, 0, 2, 4, 7, 9, 10, 11, 11, 12, 11, 11, 10, 9, 8, 7, 6, 6, 5, 3, 2, 1, -0, -2, -3, -5, -6, -7, -8, -9, -9, -11, -12, -9, -11, -12, -12, -13, -12, -11, -12, -12, -13, -13, -14, -14, -15, -14, -15, -16, -18, -20, -21, -22, -22, -22, -22, -22, -23, -24, -24, -25, -26, -27, -28, -30, -32, -33, -34, -34, -35, -36, -38, -39, -40, -41, -42, -43, -44, -45, -45, -45, -45, -45, -45, -45, -44, -43, -41, -39, -37, -34, -32, -30, -29, -27, -25, -23, -22, -19, -18, -16, -15, -14, -10, -7, -3, -0, 4, 7, 10, 13, 15, 19, 21, 23, 25, 28, 31, 34, 36, 39, 41, 44, 45, 47, 50, 51, 54, 56, 58, 59, 59, 60, 60, 60, 60, 61, 61, 61, 61, 61, 60, 60, 60, 60, 60, 60, 59, 59, 60, 61, 60, 61, 60, 59, 58, 57, 56, 56, 55, 55, 53, 51, 49, 46, 45, 44, 43, 42, 42, 42, 41, 41, 41, 41, 41, 40, 39, 37, 36, 34, 33, 31, 30, 31, 30, 29, 28, 28, 27, 26, 24, 22, 20, 19, 19, 18, 17, 17, 16, 14, 12, 11, 10, 9, 8, 8, 7, 5, 5, 4, 3, 1, 0, -1, -2, -3, -4, -6, -9, -11, -12, -11, -12, -15, -17, -19, -20, -23, -24, -24, -25, -26, -27, -28, -29, -30, -32, -33, -35, -37, -38, -39, -39, -40, -40, -40, -41, -41, -42, -41, -40, -39, -39, -40, -41, -41, -40, -40, -40, -39, -38, -37, -36, -36, -37, -38, -38, -37, -36, -35, -35, -34, -31, -29, -27, -25, -23, -20, -19, -17, -15, -12, -10, -8, -6, -4, -2, 0, 2, 5, 6, 8, 9, 11, 13, 15, 17, 18, 18, 17, 18, 18, 18, 19, 19, 18, 18, 17, 16, 16, 17, 18, 18, 18, 19, 20, 21, 21, 23, 23, 24, 24, 21, 17, 5, -3, 1, 8, 10, 9, 5, 1, -3, -0, 3, 5, 7, 5, 2, 2, 1, 1, 2, 5,
- /* 54.0 */ 5, -0, 2, 3, 4, 4, 5, 6, 7, 8, 10, 11, 13, 15, 18, 18, 16, 13, 8, 7, 8, 8, 8, 8, 9, 10, 11, 11, 11, 10, 11, 10, 9, 7, 5, 4, 3, 1, 0, -1, -2, -3, -4, -5, -6, -8, -9, -6, -8, -9, -9, -10, -10, -10, -11, -12, -12, -13, -14, -14, -14, -15, -15, -16, -18, -19, -20, -22, -23, -23, -24, -25, -25, -26, -26, -26, -27, -29, -30, -30, -31, -32, -34, -36, -37, -38, -39, -39, -40, -42, -43, -44, -45, -46, -46, -46, -45, -45, -45, -44, -44, -43, -42, -41, -39, -37, -35, -32, -31, -29, -27, -24, -23, -21, -20, -18, -18, -16, -15, -13, -9, -5, -1, 2, 6, 11, 14, 16, 18, 21, 24, 27, 30, 32, 35, 38, 40, 42, 44, 47, 49, 51, 53, 55, 58, 59, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 60, 60, 60, 61, 61, 61, 60, 59, 58, 58, 58, 59, 59, 59, 58, 58, 57, 56, 55, 54, 53, 51, 48, 46, 44, 43, 41, 41, 41, 40, 40, 39, 39, 40, 39, 39, 37, 36, 35, 34, 32, 30, 29, 29, 29, 28, 28, 27, 26, 25, 24, 23, 21, 20, 18, 17, 17, 16, 16, 15, 13, 11, 10, 9, 9, 8, 7, 7, 6, 5, 4, 3, 2, 0, 0, -1, -3, -5, -8, -10, -11, -10, -10, -12, -14, -17, -18, -20, -22, -23, -24, -26, -27, -27, -28, -30, -31, -33, -34, -36, -37, -38, -38, -39, -39, -39, -39, -40, -39, -39, -40, -38, -36, -37, -39, -40, -39, -39, -38, -37, -36, -36, -37, -39, -40, -39, -38, -36, -34, -34, -33, -32, -33, -31, -27, -24, -22, -21, -19, -17, -15, -13, -11, -9, -8, -6, -4, -2, 1, 4, 5, 7, 8, 10, 12, 13, 14, 16, 17, 16, 16, 17, 17, 18, 17, 16, 17, 17, 15, 16, 17, 18, 18, 19, 19, 20, 20, 20, 22, 22, 24, 25, 24, 22, 14, 5, -1, 4, 6, 2, 0, 2, 4, 4, 3, 2, 2, 2, 3, 3, 2, 2, 4, 5,
- /* 55.0 */ -1, 1, 2, 3, 4, 5, 5, 6, 6, 7, 9, 10, 12, 14, 14, 16, 17, 17, 17, 18, 17, 16, 14, 13, 12, 10, 9, 10, 12, 12, 11, 9, 8, 7, 7, 6, 5, 3, 2, 1, 0, -1, -2, -3, -5, -7, -4, -4, -5, -6, -7, -8, -8, -9, -9, -10, -11, -12, -12, -14, -15, -16, -17, -17, -18, -19, -20, -22, -23, -24, -25, -26, -27, -28, -28, -29, -29, -31, -31, -32, -33, -34, -35, -37, -39, -40, -41, -42, -42, -43, -45, -46, -46, -47, -47, -46, -45, -45, -45, -44, -44, -44, -43, -41, -39, -37, -35, -33, -31, -29, -26, -24, -23, -20, -17, -16, -15, -13, -12, -11, -8, -4, -1, 3, 8, 13, 15, 16, 18, 22, 25, 28, 31, 34, 37, 39, 41, 43, 45, 47, 50, 52, 54, 56, 58, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 60, 60, 60, 61, 62, 62, 60, 58, 58, 57, 56, 56, 56, 58, 58, 58, 57, 56, 55, 54, 53, 51, 48, 46, 44, 43, 42, 42, 41, 41, 40, 41, 40, 40, 39, 37, 36, 34, 34, 33, 31, 29, 28, 27, 26, 25, 25, 25, 24, 23, 22, 21, 20, 19, 19, 17, 17, 16, 16, 15, 15, 14, 12, 11, 10, 9, 7, 6, 6, 6, 5, 4, 3, 2, 1, -0, -2, -4, -6, -8, -10, -9, -9, -10, -12, -14, -17, -18, -20, -22, -23, -24, -25, -26, -27, -29, -30, -32, -33, -34, -35, -35, -36, -36, -36, -36, -37, -37, -37, -38, -37, -35, -36, -38, -38, -38, -38, -37, -38, -38, -38, -38, -40, -40, -40, -39, -37, -35, -34, -33, -32, -32, -32, -30, -26, -25, -23, -20, -18, -17, -15, -13, -11, -9, -8, -6, -4, -2, 0, 2, 4, 5, 7, 9, 12, 13, 14, 14, 15, 15, 15, 16, 16, 16, 15, 16, 16, 16, 16, 17, 18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 24, 25, 23, 22, 20, 14, 1, -1, 1, 8, 14, 9, 7, 5, 2, 2, 2, -0, -2, 1, 4, 4, 2, -1,
- /* 56.0 */ 2, 2, 3, 3, 3, 3, 3, 4, 5, 8, 10, 12, 13, 13, 14, 14, 15, 15, 15, 16, 17, 16, 14, 13, 12, 13, 14, 11, 7, 6, 7, 8, 9, 9, 8, 8, 6, 6, 5, 3, 2, 1, -1, -2, -4, -1, -0, -1, -2, -2, -3, -6, -7, -7, -8, -8, -10, -11, -13, -14, -15, -16, -17, -18, -19, -20, -21, -23, -24, -25, -27, -28, -29, -29, -29, -30, -31, -31, -32, -33, -34, -35, -37, -38, -40, -41, -42, -43, -44, -45, -46, -48, -47, -48, -48, -48, -47, -47, -46, -45, -44, -44, -43, -41, -39, -37, -35, -33, -31, -29, -27, -26, -25, -21, -17, -15, -13, -11, -10, -9, -6, -0, 5, 6, 8, 11, 14, 17, 20, 23, 26, 28, 31, 34, 37, 39, 41, 43, 45, 47, 49, 52, 54, 56, 58, 60, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 62, 63, 63, 61, 61, 61, 61, 62, 62, 60, 58, 57, 55, 56, 57, 58, 58, 57, 56, 55, 54, 52, 50, 48, 47, 45, 45, 44, 43, 42, 42, 41, 41, 40, 39, 38, 37, 36, 35, 33, 32, 30, 28, 26, 25, 25, 24, 23, 23, 22, 21, 21, 20, 19, 19, 17, 17, 17, 17, 16, 15, 15, 14, 13, 12, 10, 9, 8, 8, 7, 6, 6, 5, 4, 3, 1, -1, -2, -5, -6, -7, -7, -7, -8, -8, -10, -13, -16, -18, -19, -20, -22, -23, -24, -25, -27, -28, -30, -31, -31, -32, -34, -34, -35, -35, -35, -35, -36, -36, -36, -36, -36, -37, -38, -38, -38, -38, -39, -39, -39, -40, -41, -41, -41, -40, -39, -38, -37, -36, -34, -34, -33, -32, -29, -28, -27, -26, -24, -22, -20, -18, -15, -11, -10, -9, -8, -7, -4, -2, -0, 2, 4, 6, 8, 10, 11, 12, 13, 13, 14, 15, 15, 15, 15, 14, 14, 15, 15, 16, 17, 18, 18, 18, 19, 19, 19, 18, 18, 18, 20, 21, 22, 24, 23, 21, 19, 15, 11, 7, 8, 9, 8, 8, 7, 6, 4, 2, 3, 1, 1, -0, -0, -0, 1, 2,
- /* 57.0 */ 2, 2, 2, 3, 3, 2, 5, 10, 11, 11, 12, 12, 12, 13, 13, 14, 15, 15, 15, 15, 14, 15, 16, 15, 12, 12, 13, 14, 15, 14, 11, 8, 7, 8, 8, 8, 7, 6, 5, 4, 3, 1, 0, -1, 1, 2, 1, 1, 1, 1, -2, -3, -4, -5, -6, -8, -8, -10, -12, -13, -14, -15, -17, -19, -20, -22, -22, -23, -25, -26, -28, -29, -29, -30, -30, -31, -32, -33, -34, -35, -36, -38, -39, -41, -42, -43, -45, -46, -47, -47, -48, -48, -49, -49, -48, -48, -48, -48, -47, -45, -44, -44, -42, -41, -39, -37, -35, -33, -31, -29, -28, -27, -23, -20, -16, -13, -11, -10, -9, -7, -1, 4, 6, 8, 11, 13, 16, 18, 21, 24, 27, 29, 32, 34, 37, 39, 42, 44, 46, 47, 49, 51, 53, 55, 57, 60, 61, 62, 62, 62, 62, 61, 61, 61, 61, 61, 61, 61, 62, 62, 61, 60, 60, 60, 60, 60, 60, 57, 55, 56, 56, 58, 58, 57, 56, 55, 54, 52, 50, 48, 47, 46, 46, 44, 43, 43, 42, 41, 40, 39, 38, 38, 37, 36, 34, 32, 30, 28, 27, 25, 23, 22, 22, 21, 20, 21, 21, 20, 19, 19, 18, 16, 16, 17, 16, 14, 13, 13, 13, 13, 12, 11, 9, 9, 8, 9, 8, 7, 6, 5, 4, 2, 0, -1, -3, -5, -5, -5, -6, -6, -7, -10, -12, -14, -16, -18, -19, -21, -22, -23, -25, -26, -28, -29, -29, -30, -31, -32, -33, -34, -34, -34, -35, -35, -36, -36, -36, -37, -38, -38, -38, -39, -39, -39, -39, -40, -41, -40, -40, -40, -39, -38, -37, -36, -35, -35, -34, -34, -33, -30, -27, -24, -24, -23, -21, -19, -17, -15, -13, -12, -10, -10, -8, -5, -4, -2, 1, 4, 6, 7, 9, 10, 11, 11, 12, 12, 14, 15, 15, 15, 14, 14, 14, 15, 15, 16, 17, 17, 18, 18, 18, 17, 17, 16, 17, 18, 19, 20, 21, 21, 20, 19, 18, 15, 11, 10, 10, 9, 8, 7, 6, 5, 3, 2, 2, 2, 1, 1, 1, 2, 2,
- /* 58.0 */ 2, 1, 1, 2, 4, 4, 7, 9, 9, 10, 11, 11, 12, 12, 13, 14, 14, 14, 15, 15, 15, 15, 15, 15, 16, 15, 13, 13, 12, 13, 14, 13, 10, 6, 6, 7, 7, 7, 5, 4, 3, 3, 2, 3, 4, 3, 2, 3, 2, 1, -0, -1, -2, -4, -5, -6, -9, -12, -13, -15, -15, -17, -19, -20, -21, -23, -24, -24, -26, -28, -29, -30, -31, -32, -32, -33, -34, -35, -36, -37, -38, -40, -41, -43, -44, -45, -46, -47, -48, -48, -48, -49, -49, -48, -48, -48, -47, -47, -46, -45, -44, -42, -41, -38, -37, -35, -33, -32, -30, -28, -28, -26, -22, -19, -16, -12, -9, -8, -7, -3, 3, 5, 6, 9, 11, 14, 17, 19, 22, 25, 27, 30, 32, 35, 38, 40, 42, 43, 45, 47, 49, 51, 52, 54, 56, 58, 60, 62, 63, 63, 63, 63, 63, 62, 62, 61, 61, 61, 61, 61, 61, 61, 61, 60, 60, 60, 60, 57, 56, 56, 56, 58, 57, 57, 56, 55, 53, 50, 49, 49, 48, 47, 46, 45, 44, 43, 42, 42, 41, 39, 38, 37, 36, 34, 33, 31, 29, 27, 25, 22, 21, 20, 20, 20, 19, 19, 20, 19, 18, 17, 16, 15, 16, 15, 15, 15, 14, 14, 14, 13, 12, 11, 11, 10, 9, 9, 9, 8, 7, 6, 5, 4, 2, 1, -1, -2, -3, -3, -4, -5, -5, -8, -11, -13, -15, -16, -18, -20, -21, -22, -24, -25, -26, -27, -28, -29, -30, -30, -32, -33, -33, -34, -34, -35, -36, -36, -35, -35, -36, -37, -37, -38, -38, -37, -36, -38, -39, -40, -40, -40, -39, -37, -36, -35, -34, -34, -34, -33, -33, -32, -29, -27, -24, -22, -20, -19, -17, -16, -16, -14, -13, -11, -9, -7, -5, -2, 1, 2, 4, 6, 7, 8, 10, 10, 10, 11, 11, 12, 14, 15, 14, 13, 13, 13, 13, 14, 15, 15, 16, 16, 17, 17, 16, 16, 17, 16, 17, 19, 19, 18, 18, 19, 17, 15, 13, 10, 10, 9, 7, 6, 7, 6, 3, 2, 2, 1, 1, 1, 1, 1, 2,
- /* 59.0 */ 1, 1, 4, 6, 6, 7, 8, 8, 9, 9, 10, 11, 11, 12, 12, 13, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 14, 12, 11, 10, 11, 13, 12, 11, 8, 7, 6, 6, 7, 8, 7, 5, 7, 9, 6, 5, 5, 3, 2, 2, 0, -1, -3, -4, -5, -8, -11, -12, -13, -15, -17, -18, -19, -20, -20, -21, -24, -27, -29, -30, -31, -32, -33, -33, -34, -35, -35, -36, -38, -40, -41, -42, -43, -45, -46, -48, -49, -49, -49, -49, -48, -48, -48, -48, -48, -47, -46, -46, -45, -44, -44, -42, -39, -36, -34, -33, -31, -29, -28, -27, -26, -24, -21, -18, -15, -11, -7, -5, -1, 3, 5, 5, 7, 10, 13, 15, 18, 21, 23, 25, 28, 31, 34, 36, 38, 40, 43, 45, 46, 47, 49, 50, 52, 53, 55, 57, 59, 61, 62, 63, 64, 64, 63, 63, 63, 62, 62, 61, 61, 61, 60, 61, 61, 60, 59, 59, 58, 56, 56, 55, 56, 55, 55, 57, 56, 55, 54, 52, 51, 48, 47, 47, 46, 45, 44, 44, 44, 45, 44, 42, 40, 38, 35, 33, 31, 29, 28, 26, 24, 21, 19, 18, 19, 20, 20, 19, 18, 17, 17, 16, 15, 15, 15, 16, 17, 16, 15, 14, 14, 14, 13, 13, 13, 11, 10, 9, 9, 8, 7, 7, 6, 5, 4, 2, 1, 0, -1, -2, -3, -3, -5, -9, -10, -12, -14, -15, -17, -18, -20, -21, -22, -24, -25, -27, -28, -28, -29, -30, -31, -31, -32, -33, -33, -34, -34, -34, -35, -34, -35, -36, -37, -36, -35, -34, -34, -34, -34, -35, -36, -36, -36, -36, -36, -34, -32, -32, -32, -31, -31, -30, -29, -28, -27, -25, -23, -20, -19, -19, -19, -18, -16, -14, -11, -8, -6, -5, -3, -1, 0, 1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13, 13, 13, 13, 13, 14, 14, 15, 16, 17, 18, 17, 17, 16, 16, 16, 16, 16, 17, 17, 17, 16, 14, 14, 12, 10, 7, 6, 6, 7, 5, 1, 0, 0, 0, -0, 0, 0, 1, 1,
- /* 60.0 */ 0, 3, 5, 5, 5, 6, 7, 7, 8, 9, 9, 10, 10, 11, 12, 12, 12, 13, 13, 15, 15, 15, 15, 15, 15, 15, 14, 13, 9, 11, 13, 13, 13, 12, 12, 12, 11, 10, 11, 10, 11, 12, 11, 10, 8, 7, 5, 4, 3, 2, 0, -1, -3, -4, -5, -7, -10, -12, -12, -14, -16, -17, -18, -20, -22, -24, -26, -28, -29, -30, -31, -32, -33, -34, -35, -36, -37, -39, -40, -41, -42, -43, -44, -46, -47, -48, -49, -50, -49, -48, -47, -46, -47, -47, -47, -45, -44, -43, -43, -42, -42, -41, -38, -35, -32, -30, -28, -27, -25, -24, -23, -21, -19, -17, -13, -8, -5, -2, 1, 4, 5, 7, 9, 11, 14, 17, 19, 22, 24, 27, 29, 30, 33, 36, 39, 41, 44, 45, 48, 48, 49, 50, 51, 52, 54, 56, 58, 60, 61, 63, 64, 64, 64, 64, 64, 63, 63, 62, 61, 61, 61, 60, 60, 60, 60, 60, 60, 58, 58, 57, 55, 56, 56, 55, 55, 54, 54, 53, 51, 49, 48, 47, 47, 45, 45, 45, 44, 45, 45, 42, 40, 39, 36, 33, 31, 29, 27, 25, 23, 20, 19, 19, 19, 20, 19, 18, 16, 16, 15, 15, 16, 16, 16, 16, 16, 16, 14, 12, 11, 12, 11, 11, 11, 11, 11, 10, 8, 7, 7, 7, 6, 5, 4, 3, 2, 0, -1, -2, -3, -3, -4, -8, -10, -11, -13, -15, -16, -17, -18, -20, -21, -23, -24, -25, -26, -26, -28, -28, -29, -30, -31, -31, -32, -32, -32, -32, -32, -32, -33, -34, -34, -33, -32, -31, -31, -33, -35, -35, -34, -34, -34, -34, -33, -33, -32, -31, -31, -31, -29, -28, -28, -28, -28, -28, -27, -26, -23, -20, -19, -18, -17, -15, -12, -10, -8, -6, -4, -3, -2, -1, 1, 2, 4, 4, 5, 5, 6, 9, 10, 11, 12, 13, 12, 13, 14, 14, 14, 14, 14, 15, 16, 17, 17, 17, 17, 16, 15, 14, 14, 14, 14, 15, 14, 13, 13, 13, 12, 11, 9, 8, 9, 4, -1, -1, -1, -2, -2, -1, -0, 0, 0,
- /* 61.0 */ 5, 4, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 9, 10, 11, 11, 11, 12, 12, 13, 14, 14, 14, 14, 14, 15, 15, 15, 11, 6, 8, 12, 14, 16, 17, 18, 18, 16, 15, 17, 16, 13, 12, 10, 8, 7, 6, 5, 4, 3, 1, -0, -1, -2, -3, -5, -8, -11, -12, -14, -16, -18, -20, -22, -24, -26, -28, -29, -30, -31, -32, -32, -33, -34, -35, -37, -38, -39, -41, -42, -43, -44, -45, -46, -48, -48, -49, -49, -49, -48, -47, -46, -46, -46, -45, -44, -43, -42, -40, -38, -37, -37, -35, -33, -31, -29, -27, -25, -24, -23, -22, -21, -20, -18, -13, -8, -3, -0, 3, 6, 8, 9, 11, 13, 16, 19, 21, 23, 25, 27, 29, 31, 33, 36, 38, 42, 46, 46, 48, 49, 49, 50, 51, 52, 53, 55, 56, 58, 60, 62, 63, 64, 65, 65, 65, 64, 64, 63, 63, 62, 61, 61, 60, 60, 60, 60, 59, 60, 59, 59, 58, 58, 57, 57, 55, 53, 52, 51, 51, 51, 49, 48, 47, 46, 45, 46, 46, 46, 45, 43, 40, 38, 36, 34, 32, 31, 29, 26, 23, 21, 20, 19, 19, 19, 19, 18, 17, 15, 15, 16, 16, 16, 16, 15, 15, 14, 13, 12, 12, 12, 11, 11, 11, 11, 10, 9, 9, 8, 7, 7, 6, 5, 3, 3, 1, -0, -2, -3, -4, -3, -3, -6, -9, -10, -11, -13, -15, -17, -18, -19, -20, -21, -23, -24, -24, -25, -26, -27, -27, -28, -29, -29, -29, -29, -29, -29, -29, -29, -30, -31, -30, -30, -30, -30, -31, -32, -33, -34, -34, -34, -33, -33, -32, -31, -31, -30, -30, -30, -29, -28, -27, -26, -26, -26, -26, -26, -24, -21, -19, -19, -17, -15, -13, -11, -10, -8, -7, -6, -5, -3, -1, 0, 2, 3, 3, 4, 5, 8, 9, 11, 11, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 16, 17, 16, 15, 14, 13, 13, 14, 14, 14, 12, 11, 12, 12, 12, 11, 10, 10, 10, 8, 5, 3, 1, -1, -2, -0, 4, 5,
- /* 62.0 */ 5, 5, 4, 5, 5, 6, 6, 6, 6, 6, 7, 7, 8, 8, 9, 10, 10, 11, 11, 12, 12, 12, 12, 12, 12, 14, 16, 15, 12, 10, 11, 16, 18, 18, 17, 17, 18, 18, 17, 15, 13, 12, 11, 9, 8, 7, 6, 5, 4, 2, 2, 1, 0, -1, -2, -4, -7, -11, -13, -14, -15, -18, -20, -22, -24, -26, -28, -29, -29, -30, -31, -32, -34, -34, -35, -37, -38, -40, -42, -42, -43, -44, -45, -46, -47, -48, -48, -48, -48, -48, -47, -46, -45, -44, -44, -43, -42, -40, -39, -38, -36, -34, -33, -31, -29, -27, -25, -24, -24, -23, -21, -19, -16, -13, -9, -5, -1, 2, 6, 10, 9, 10, 12, 15, 18, 20, 22, 23, 25, 29, 31, 33, 37, 42, 45, 48, 49, 47, 47, 50, 50, 50, 51, 52, 53, 54, 55, 57, 59, 60, 62, 63, 64, 65, 65, 65, 65, 64, 64, 64, 63, 62, 62, 61, 61, 60, 60, 60, 60, 60, 59, 59, 58, 57, 56, 54, 52, 50, 49, 50, 50, 49, 48, 47, 46, 45, 45, 46, 46, 45, 42, 39, 37, 35, 34, 32, 30, 27, 23, 22, 21, 19, 19, 19, 18, 18, 19, 19, 18, 18, 18, 17, 17, 16, 15, 14, 14, 14, 13, 12, 11, 12, 11, 11, 10, 9, 9, 8, 8, 7, 6, 4, 2, 1, -0, -1, -1, -2, -3, -3, -3, -6, -9, -10, -11, -11, -13, -15, -17, -18, -19, -20, -21, -22, -22, -23, -24, -25, -25, -25, -26, -27, -27, -28, -27, -27, -27, -27, -27, -27, -28, -29, -29, -29, -29, -29, -30, -30, -31, -31, -31, -31, -31, -30, -30, -29, -29, -29, -29, -28, -27, -25, -25, -24, -24, -23, -22, -20, -19, -22, -22, -18, -14, -12, -12, -11, -10, -9, -8, -6, -5, -3, -1, -0, 1, 1, 2, 4, 7, 8, 9, 11, 12, 12, 12, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 15, 14, 14, 13, 13, 13, 13, 13, 12, 11, 11, 11, 10, 10, 11, 11, 11, 10, 8, 6, 4, 2, 3, 5, 5, 5,
- /* 63.0 */ 4, 5, 5, 4, 5, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 9, 10, 11, 11, 11, 11, 11, 12, 12, 12, 12, 14, 16, 17, 15, 15, 16, 17, 17, 17, 16, 15, 13, 12, 12, 11, 10, 8, 7, 6, 5, 4, 3, 2, 2, 1, 0, -1, -3, -5, -8, -11, -12, -14, -16, -18, -20, -22, -23, -25, -27, -27, -28, -29, -30, -31, -32, -34, -35, -36, -38, -39, -41, -42, -43, -44, -45, -45, -45, -45, -45, -45, -45, -44, -44, -43, -43, -42, -41, -41, -40, -39, -38, -37, -36, -35, -33, -32, -31, -29, -28, -26, -23, -20, -16, -13, -11, -9, -6, -4, -1, 2, 7, 10, 11, 12, 14, 16, 18, 20, 22, 25, 28, 30, 32, 37, 41, 44, 47, 49, 50, 48, 46, 48, 50, 50, 51, 52, 52, 53, 55, 56, 57, 59, 61, 62, 63, 64, 65, 65, 65, 65, 65, 65, 63, 63, 63, 62, 61, 61, 61, 62, 62, 61, 60, 60, 59, 57, 56, 54, 52, 51, 50, 50, 49, 48, 47, 47, 45, 45, 45, 45, 44, 42, 41, 40, 37, 35, 33, 32, 31, 29, 25, 22, 20, 18, 18, 18, 18, 18, 18, 18, 18, 18, 17, 16, 15, 15, 15, 14, 14, 14, 13, 13, 12, 12, 11, 11, 11, 9, 9, 9, 9, 8, 6, 4, 2, 1, 1, 1, -0, -2, -2, -2, -3, -6, -8, -10, -11, -11, -12, -13, -14, -16, -17, -18, -19, -20, -21, -21, -22, -23, -23, -23, -24, -24, -24, -25, -24, -25, -26, -26, -26, -27, -26, -27, -27, -27, -28, -29, -29, -29, -29, -30, -30, -30, -29, -30, -30, -29, -29, -29, -28, -26, -25, -24, -24, -23, -22, -22, -23, -22, -20, -18, -18, -17, -15, -14, -14, -13, -13, -12, -11, -11, -10, -8, -7, -6, -5, -4, -2, 1, 5, 7, 8, 8, 9, 9, 10, 11, 11, 11, 12, 12, 12, 12, 12, 11, 12, 13, 13, 13, 13, 13, 13, 12, 12, 11, 12, 12, 11, 10, 10, 10, 9, 9, 9, 8, 7, 7, 6, 5, 5, 5, 4,
- /* 64.0 */ 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 8, 9, 10, 10, 10, 10, 10, 11, 12, 12, 12, 13, 14, 14, 15, 15, 14, 13, 13, 13, 12, 12, 11, 10, 10, 9, 8, 7, 6, 5, 5, 4, 3, 2, -0, -3, -6, -8, -9, -11, -13, -14, -16, -18, -19, -21, -22, -23, -24, -25, -27, -28, -29, -30, -32, -34, -34, -35, -37, -39, -40, -42, -43, -44, -44, -43, -43, -42, -41, -41, -40, -40, -40, -40, -39, -39, -38, -37, -37, -36, -35, -34, -34, -33, -32, -31, -29, -28, -26, -23, -20, -16, -13, -11, -8, -4, -2, -2, -1, 1, 7, 12, 14, 15, 16, 19, 21, 22, 26, 28, 28, 29, 33, 36, 40, 43, 46, 49, 50, 50, 48, 45, 47, 50, 52, 53, 54, 54, 54, 55, 56, 58, 59, 61, 62, 63, 65, 65, 65, 66, 66, 66, 67, 67, 66, 65, 65, 64, 63, 63, 62, 61, 60, 58, 57, 55, 53, 52, 52, 52, 51, 51, 50, 49, 47, 45, 43, 42, 43, 43, 42, 41, 41, 39, 36, 34, 32, 31, 30, 30, 28, 26, 24, 21, 19, 18, 17, 18, 18, 18, 18, 18, 18, 17, 16, 16, 16, 15, 15, 15, 14, 14, 13, 13, 12, 11, 10, 9, 9, 9, 8, 7, 6, 5, 4, 2, 1, -0, -1, -2, -3, -2, -2, -4, -6, -8, -10, -11, -12, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -21, -21, -21, -21, -22, -22, -22, -22, -23, -24, -25, -25, -25, -25, -24, -24, -25, -27, -28, -28, -28, -28, -28, -29, -29, -29, -28, -27, -26, -26, -26, -25, -24, -23, -22, -21, -20, -20, -20, -20, -20, -19, -18, -18, -18, -17, -16, -16, -15, -14, -13, -11, -9, -10, -9, -6, -3, -0, 1, 3, 4, 5, 6, 6, 6, 7, 8, 9, 9, 9, 11, 11, 10, 10, 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 12, 12, 12, 11, 11, 11, 10, 10, 9, 9, 8, 8, 8, 7, 6, 5, 4, 4, 4, 4,
- /* 65.0 */ 5, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 11, 11, 11, 11, 10, 9, 9, 8, 7, 7, 5, 3, 2, -0, -3, -7, -10, -11, -11, -13, -15, -16, -16, -18, -19, -20, -20, -22, -22, -24, -25, -26, -28, -29, -31, -33, -34, -34, -36, -37, -38, -39, -40, -41, -41, -41, -41, -40, -39, -38, -38, -38, -37, -37, -37, -37, -36, -35, -33, -33, -33, -33, -32, -32, -30, -28, -26, -25, -23, -21, -19, -16, -13, -11, -8, -6, -5, -2, 1, 3, 6, 12, 16, 18, 19, 20, 22, 26, 28, 27, 27, 29, 33, 37, 40, 43, 46, 48, 49, 49, 48, 45, 44, 46, 48, 51, 54, 56, 56, 56, 56, 58, 59, 59, 61, 63, 64, 64, 65, 66, 66, 67, 67, 67, 67, 67, 66, 66, 64, 63, 62, 61, 60, 58, 57, 56, 54, 53, 53, 52, 52, 51, 51, 50, 48, 46, 45, 44, 43, 41, 41, 40, 40, 39, 38, 36, 34, 32, 31, 30, 29, 27, 25, 23, 20, 19, 18, 18, 18, 18, 17, 18, 18, 17, 17, 17, 17, 17, 17, 17, 15, 13, 13, 12, 11, 10, 9, 8, 8, 7, 7, 6, 6, 5, 4, 2, 1, -0, -0, -2, -3, -2, -1, -2, -4, -6, -8, -10, -11, -11, -13, -13, -14, -15, -16, -17, -18, -18, -19, -19, -19, -19, -20, -21, -20, -20, -20, -21, -22, -23, -23, -23, -23, -22, -23, -25, -25, -25, -25, -25, -25, -24, -24, -25, -25, -24, -23, -22, -22, -22, -21, -20, -19, -18, -18, -17, -17, -18, -18, -18, -18, -17, -17, -17, -17, -17, -17, -16, -14, -10, -7, -5, -4, -4, -3, -2, -0, 0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 9, 9, 9, 10, 9, 7, 7, 8, 8, 8, 8, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 10, 10, 9, 9, 7, 7, 7, 6, 6, 5, 5, 5, 5, 5,
- /* 66.0 */ 5, 4, 4, 4, 4, 4, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 10, 10, 9, 9, 10, 10, 9, 9, 9, 9, 9, 9, 9, 8, 7, 6, 6, 4, 2, -0, -2, -4, -5, -6, -7, -7, -9, -10, -12, -13, -15, -16, -17, -18, -19, -19, -19, -20, -21, -23, -24, -25, -27, -29, -30, -32, -33, -34, -36, -36, -37, -38, -38, -39, -39, -39, -38, -37, -37, -36, -36, -36, -36, -35, -34, -34, -34, -33, -33, -32, -31, -30, -30, -29, -28, -28, -26, -24, -23, -21, -18, -16, -13, -11, -8, -5, -1, 3, 6, 8, 9, 13, 17, 19, 21, 22, 24, 27, 28, 30, 31, 32, 34, 36, 39, 42, 44, 45, 47, 48, 48, 48, 48, 49, 49, 51, 53, 55, 57, 58, 58, 59, 60, 60, 61, 61, 62, 63, 64, 65, 65, 65, 66, 66, 65, 65, 65, 64, 63, 63, 62, 60, 58, 58, 56, 54, 54, 53, 52, 52, 51, 51, 50, 49, 47, 46, 45, 44, 43, 43, 42, 41, 40, 39, 37, 35, 34, 33, 32, 31, 30, 29, 28, 25, 23, 22, 20, 20, 19, 18, 18, 18, 18, 17, 17, 18, 18, 17, 16, 15, 15, 15, 14, 13, 12, 12, 12, 10, 8, 6, 6, 7, 6, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -6, -5, -4, -6, -8, -10, -11, -12, -13, -14, -16, -17, -17, -17, -17, -17, -17, -17, -18, -19, -19, -19, -18, -19, -20, -21, -22, -22, -22, -22, -23, -23, -22, -22, -22, -23, -23, -22, -22, -22, -22, -21, -21, -20, -20, -19, -18, -17, -17, -16, -16, -15, -15, -15, -16, -15, -15, -15, -15, -14, -14, -15, -15, -14, -12, -8, -6, -4, -4, -5, -4, -3, -2, -1, -0, 1, 2, 3, 4, 5, 5, 5, 5, 7, 8, 8, 7, 5, 4, 5, 7, 7, 7, 7, 7, 7, 8, 8, 9, 9, 10, 10, 10, 10, 10, 10, 9, 9, 8, 8, 8, 6, 6, 6, 6, 5, 5, 5, 5,
- /* 67.0 */ 5, 5, 4, 4, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 6, 7, 8, 8, 9, 9, 9, 9, 9, 9, 8, 7, 7, 7, 7, 7, 7, 7, 6, 5, 4, 4, 2, -0, -1, -2, -3, -4, -5, -5, -6, -8, -9, -10, -12, -13, -15, -16, -16, -17, -18, -19, -20, -22, -23, -25, -26, -28, -30, -31, -32, -33, -34, -35, -36, -36, -37, -37, -37, -37, -37, -36, -35, -34, -34, -33, -32, -31, -31, -32, -32, -31, -31, -30, -29, -28, -28, -27, -27, -26, -26, -24, -22, -21, -19, -16, -14, -10, -7, -3, 1, 6, 8, 7, 8, 11, 15, 18, 19, 21, 23, 25, 26, 26, 28, 30, 31, 33, 36, 39, 41, 43, 44, 46, 47, 48, 48, 49, 50, 53, 55, 56, 57, 57, 57, 57, 58, 58, 59, 60, 60, 60, 61, 62, 63, 63, 64, 64, 64, 64, 63, 63, 63, 62, 60, 59, 58, 57, 56, 55, 54, 53, 52, 52, 51, 51, 50, 49, 48, 48, 47, 45, 43, 43, 42, 43, 42, 41, 40, 38, 36, 33, 31, 30, 31, 31, 31, 30, 28, 26, 24, 23, 22, 20, 19, 18, 18, 18, 17, 17, 17, 17, 18, 18, 17, 16, 15, 14, 13, 12, 12, 11, 9, 8, 7, 8, 7, 6, 4, 3, 2, 1, 0, -0, -1, -2, -3, -4, -5, -7, -7, -6, -5, -5, -7, -8, -10, -12, -13, -14, -15, -15, -15, -15, -15, -15, -16, -16, -16, -17, -17, -17, -18, -17, -18, -18, -19, -20, -20, -19, -20, -20, -20, -20, -20, -19, -19, -20, -20, -19, -18, -18, -19, -19, -18, -18, -17, -17, -16, -15, -15, -14, -14, -13, -13, -12, -12, -12, -12, -12, -13, -14, -14, -11, -8, -5, -5, -5, -5, -5, -4, -3, -2, -2, -1, 0, 3, 3, 3, 3, 5, 6, 5, 2, 2, 4, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 8, 8, 8, 7, 7, 6, 6, 6, 6, 6, 6, 5,
- /* 68.0 */ 5, 4, 4, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 4, 4, 4, 4, 5, 6, 8, 8, 7, 7, 8, 9, 9, 9, 9, 8, 8, 8, 7, 7, 6, 5, 4, 3, 2, 0, -2, -2, -2, -2, -3, -5, -6, -6, -7, -8, -8, -9, -10, -10, -11, -12, -15, -17, -18, -19, -21, -23, -25, -26, -28, -29, -30, -31, -32, -32, -33, -33, -34, -35, -35, -35, -35, -35, -35, -34, -34, -33, -32, -30, -30, -30, -30, -31, -31, -30, -28, -26, -26, -26, -26, -25, -24, -23, -22, -21, -19, -17, -14, -12, -9, -5, -2, 0, 2, 3, 6, 9, 12, 14, 17, 19, 22, 24, 25, 25, 25, 25, 26, 27, 29, 32, 34, 36, 38, 40, 42, 43, 45, 46, 47, 48, 49, 51, 54, 56, 56, 56, 56, 57, 58, 59, 59, 59, 59, 60, 59, 59, 60, 61, 61, 62, 62, 62, 62, 61, 61, 60, 59, 59, 58, 57, 56, 55, 54, 52, 51, 51, 51, 50, 49, 49, 48, 48, 48, 47, 45, 44, 42, 41, 41, 41, 41, 41, 39, 36, 32, 30, 30, 31, 32, 31, 29, 28, 27, 25, 24, 23, 22, 21, 20, 19, 18, 18, 18, 18, 18, 17, 16, 15, 14, 13, 11, 11, 11, 10, 10, 9, 9, 8, 6, 5, 4, 3, 2, 1, -0, -1, -1, -2, -3, -3, -4, -5, -6, -7, -7, -6, -6, -7, -9, -11, -12, -13, -14, -14, -14, -14, -14, -14, -14, -15, -15, -15, -16, -16, -16, -15, -16, -17, -17, -18, -18, -17, -17, -16, -16, -16, -17, -16, -16, -16, -17, -16, -16, -16, -16, -17, -16, -17, -16, -16, -15, -15, -15, -14, -13, -12, -12, -11, -11, -11, -11, -12, -14, -15, -16, -14, -10, -7, -5, -5, -5, -5, -4, -4, -3, -2, -1, 1, 1, 1, 2, 1, 0, 1, 2, 3, 3, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 8, 8, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5,
- /* 69.0 */ 4, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 5, 6, 7, 7, 7, 7, 5, 4, 3, 1, -2, -4, -5, -6, -6, -6, -6, -6, -7, -8, -8, -9, -9, -9, -8, -8, -9, -11, -12, -14, -15, -17, -18, -19, -20, -21, -22, -23, -26, -28, -30, -30, -31, -31, -32, -31, -31, -31, -32, -32, -32, -32, -31, -31, -30, -29, -28, -28, -28, -28, -28, -28, -27, -25, -24, -23, -24, -23, -22, -21, -21, -19, -17, -14, -11, -9, -6, -4, -2, -0, 1, 1, 4, 9, 13, 15, 16, 18, 21, 24, 25, 26, 27, 26, 24, 23, 24, 26, 29, 31, 34, 36, 38, 39, 41, 42, 44, 45, 47, 48, 50, 51, 53, 55, 54, 55, 57, 59, 59, 60, 61, 61, 60, 59, 59, 59, 59, 59, 60, 60, 61, 61, 60, 60, 60, 59, 58, 58, 57, 56, 54, 52, 52, 51, 51, 50, 49, 49, 49, 48, 47, 47, 46, 45, 44, 43, 43, 41, 40, 39, 39, 39, 38, 37, 35, 33, 32, 31, 31, 30, 29, 28, 27, 26, 25, 24, 22, 21, 20, 19, 18, 17, 17, 16, 15, 14, 13, 13, 12, 11, 10, 10, 9, 8, 8, 7, 6, 4, 4, 3, 2, 1, 0, -0, -1, -2, -3, -3, -4, -5, -5, -5, -6, -7, -7, -8, -8, -9, -10, -11, -11, -12, -12, -12, -12, -12, -13, -13, -13, -14, -14, -14, -15, -15, -15, -14, -14, -15, -16, -16, -15, -15, -15, -14, -14, -15, -15, -16, -17, -17, -16, -16, -15, -15, -15, -15, -14, -14, -13, -13, -12, -12, -12, -12, -12, -12, -11, -10, -10, -10, -12, -13, -14, -14, -13, -11, -7, -5, -5, -6, -5, -4, -4, -3, -2, -2, -1, 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 3, 4, 4, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4,
- /* 70.0 */ 3, 2, 2, 2, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, -0, -1, -1, -1, -1, -1, -1, -1, -0, -0, -0, -0, -1, -1, -2, -2, -2, -1, -2, -2, -2, -2, -3, -3, -3, -4, -4, -4, -4, -5, -6, -7, -7, -8, -9, -9, -10, -11, -11, -12, -13, -13, -14, -15, -17, -18, -18, -18, -18, -18, -19, -20, -22, -25, -27, -28, -28, -28, -28, -29, -29, -28, -28, -28, -28, -28, -27, -27, -26, -25, -25, -25, -26, -26, -26, -25, -25, -24, -22, -21, -21, -20, -20, -18, -17, -15, -13, -11, -8, -5, -2, -1, 1, 3, 4, 4, 5, 7, 10, 14, 16, 19, 21, 23, 24, 26, 27, 28, 28, 27, 26, 26, 27, 30, 32, 35, 36, 38, 39, 40, 42, 43, 44, 46, 47, 48, 50, 52, 54, 55, 55, 56, 57, 57, 57, 56, 57, 58, 58, 57, 56, 57, 58, 60, 59, 59, 59, 59, 59, 59, 59, 58, 57, 56, 55, 54, 52, 51, 51, 51, 51, 50, 50, 49, 48, 47, 47, 46, 45, 45, 44, 43, 43, 42, 41, 40, 39, 39, 38, 37, 35, 33, 31, 30, 28, 28, 27, 25, 24, 25, 24, 23, 21, 20, 19, 18, 17, 16, 15, 14, 14, 13, 12, 11, 10, 10, 9, 8, 7, 6, 6, 5, 4, 3, 2, 2, 1, -0, -1, -2, -2, -2, -2, -3, -4, -5, -6, -7, -7, -8, -8, -9, -9, -9, -10, -10, -10, -10, -10, -11, -11, -11, -12, -13, -13, -14, -14, -14, -14, -15, -14, -14, -13, -13, -13, -12, -12, -13, -14, -14, -15, -15, -15, -15, -15, -15, -15, -14, -13, -12, -11, -10, -9, -9, -10, -11, -11, -11, -11, -11, -11, -10, -10, -9, -8, -9, -9, -9, -10, -10, -10, -9, -7, -6, -6, -6, -5, -4, -3, -2, -2, -1, -1, -1, -1, -1, -1, -1, -0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3,
- /* 71.0 */ 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 0, -0, -0, -0, -0, -1, -1, -1, -1, -1, -1, -2, -2, -2, -3, -3, -4, -4, -4, -4, -3, -2, -3, -4, -5, -6, -6, -6, -6, -5, -5, -4, -3, -3, -4, -5, -7, -9, -10, -11, -12, -12, -13, -13, -14, -15, -15, -15, -16, -16, -17, -17, -17, -18, -19, -21, -23, -24, -25, -25, -25, -25, -25, -26, -26, -25, -24, -23, -23, -22, -21, -20, -19, -20, -21, -21, -21, -20, -20, -19, -18, -18, -17, -16, -15, -13, -12, -10, -8, -6, -4, -2, -0, 1, 2, 3, 3, 5, 8, 10, 12, 14, 16, 17, 19, 22, 24, 26, 26, 27, 28, 29, 28, 28, 28, 30, 32, 34, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 49, 50, 51, 52, 53, 53, 54, 55, 54, 54, 54, 54, 53, 53, 55, 56, 56, 57, 57, 56, 57, 57, 57, 57, 58, 57, 57, 56, 56, 55, 54, 54, 53, 53, 52, 52, 51, 50, 49, 48, 47, 46, 46, 45, 44, 44, 43, 42, 42, 41, 40, 40, 39, 37, 35, 33, 31, 29, 28, 28, 27, 25, 24, 23, 22, 21, 20, 19, 17, 17, 16, 16, 15, 15, 13, 12, 11, 10, 9, 9, 8, 8, 8, 7, 6, 5, 3, 3, 2, 2, 1, 1, 0, -1, -1, -2, -3, -4, -5, -6, -7, -7, -7, -7, -8, -8, -8, -9, -9, -10, -10, -10, -10, -9, -9, -10, -11, -11, -12, -12, -13, -13, -14, -14, -14, -14, -14, -14, -14, -14, -15, -15, -15, -14, -14, -13, -13, -12, -12, -12, -13, -13, -12, -11, -10, -9, -9, -9, -10, -10, -10, -10, -10, -10, -10, -9, -9, -8, -8, -7, -7, -7, -7, -7, -8, -8, -8, -7, -6, -6, -5, -5, -4, -4, -3, -3, -2, -2, -2, -1, -1, -1, -1, -0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 2, 2, 3,
- /* 72.0 */ 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, -0, -0, -0, 0, 0, 1, 0, 0, -0, -1, -1, -2, -2, -3, -3, -4, -6, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -7, -7, -7, -7, -6, -5, -4, -5, -7, -10, -11, -10, -10, -10, -9, -10, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -21, -22, -22, -22, -22, -23, -23, -22, -21, -20, -19, -18, -18, -18, -17, -16, -17, -17, -17, -16, -15, -14, -13, -13, -12, -11, -10, -9, -8, -8, -6, -4, -1, 1, 1, 2, 4, 7, 9, 10, 11, 12, 13, 14, 16, 17, 19, 21, 23, 25, 26, 26, 25, 26, 27, 28, 30, 32, 34, 35, 36, 37, 37, 38, 39, 39, 40, 41, 42, 43, 44, 46, 47, 48, 49, 49, 50, 50, 51, 51, 51, 51, 53, 54, 53, 53, 53, 53, 54, 55, 55, 54, 54, 54, 54, 54, 54, 53, 53, 53, 53, 53, 53, 53, 52, 52, 52, 52, 51, 51, 50, 49, 49, 48, 47, 46, 45, 44, 43, 42, 42, 41, 41, 41, 40, 38, 36, 34, 33, 31, 29, 27, 26, 24, 23, 22, 21, 20, 19, 18, 18, 17, 16, 15, 15, 14, 13, 12, 11, 10, 9, 8, 8, 7, 7, 6, 6, 5, 4, 3, 3, 2, 2, 2, 1, -1, -2, -2, -3, -3, -4, -5, -5, -6, -6, -6, -7, -7, -7, -7, -8, -8, -8, -8, -8, -8, -8, -9, -10, -11, -11, -11, -11, -12, -12, -12, -13, -13, -13, -13, -13, -13, -14, -14, -14, -13, -13, -13, -13, -12, -13, -14, -14, -13, -12, -12, -11, -10, -10, -10, -10, -10, -10, -10, -10, -9, -9, -9, -9, -9, -8, -8, -7, -7, -7, -7, -7, -7, -7, -6, -6, -5, -5, -4, -4, -3, -3, -3, -3, -2, -2, -2, -1, -1, -1, -0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2,
- /* 73.0 */ 2, 2, 2, 1, 1, 0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -1, -1, -1, -1, -2, -3, -4, -5, -6, -7, -8, -8, -8, -8, -8, -8, -7, -7, -7, -8, -8, -8, -8, -8, -8, -9, -9, -9, -9, -9, -8, -7, -7, -7, -8, -10, -10, -10, -10, -9, -9, -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -20, -20, -20, -20, -20, -21, -20, -19, -18, -17, -16, -15, -15, -14, -13, -12, -12, -12, -12, -12, -11, -11, -11, -11, -10, -8, -6, -5, -5, -3, -1, 2, 3, 4, 6, 9, 12, 13, 13, 14, 14, 14, 15, 16, 17, 19, 22, 24, 22, 20, 20, 21, 22, 23, 24, 26, 29, 31, 32, 34, 36, 37, 37, 37, 37, 38, 39, 40, 41, 42, 42, 43, 45, 46, 47, 48, 48, 49, 49, 49, 48, 48, 49, 50, 50, 49, 50, 51, 51, 51, 52, 53, 53, 52, 51, 51, 50, 51, 51, 51, 51, 51, 51, 50, 50, 50, 50, 49, 49, 49, 49, 49, 48, 48, 47, 46, 46, 45, 44, 43, 43, 42, 42, 41, 40, 37, 35, 33, 31, 30, 29, 28, 26, 24, 23, 22, 21, 20, 19, 18, 17, 17, 16, 16, 15, 14, 14, 13, 12, 10, 10, 9, 8, 7, 7, 6, 5, 4, 3, 3, 2, 2, 2, 2, 2, 1, -0, -2, -2, -3, -3, -4, -4, -4, -5, -5, -5, -6, -6, -6, -7, -7, -7, -7, -7, -8, -8, -9, -9, -9, -9, -9, -10, -10, -11, -11, -12, -12, -12, -11, -11, -11, -11, -11, -12, -13, -13, -13, -12, -12, -12, -12, -13, -13, -13, -12, -11, -11, -11, -10, -10, -10, -10, -9, -9, -9, -9, -9, -8, -8, -7, -7, -7, -7, -7, -6, -6, -6, -6, -5, -5, -4, -3, -3, -3, -3, -3, -2, -2, -1, -1, -1, -1, -0, -0, -0, -0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
- /* 74.0 */ 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 3, 2, 2, 1, 1, 0, 0, -0, -1, -3, -4, -5, -5, -5, -6, -6, -6, -6, -6, -6, -6, -6, -5, -4, -4, -5, -6, -7, -7, -8, -9, -9, -9, -10, -10, -10, -9, -9, -7, -6, -5, -5, -7, -9, -9, -9, -9, -10, -10, -11, -12, -12, -13, -14, -15, -15, -15, -16, -16, -17, -17, -17, -17, -17, -17, -17, -16, -16, -15, -14, -13, -12, -12, -12, -11, -10, -10, -10, -10, -10, -10, -9, -8, -8, -7, -6, -5, -4, -3, -1, 1, 3, 6, 8, 11, 13, 14, 15, 15, 16, 16, 16, 17, 18, 20, 21, 20, 19, 18, 18, 20, 21, 22, 24, 25, 27, 29, 30, 32, 33, 34, 34, 35, 35, 36, 37, 37, 38, 38, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 49, 49, 50, 50, 51, 50, 49, 49, 48, 48, 48, 48, 48, 48, 48, 48, 47, 47, 47, 47, 47, 46, 45, 45, 45, 45, 45, 45, 44, 43, 43, 42, 41, 40, 39, 39, 38, 36, 35, 33, 31, 29, 28, 26, 25, 24, 23, 22, 21, 20, 19, 19, 18, 17, 16, 15, 15, 14, 13, 12, 11, 10, 9, 9, 8, 7, 7, 6, 5, 4, 4, 3, 3, 2, 2, 2, 2, 1, 0, -1, -2, -3, -3, -3, -4, -4, -4, -4, -4, -5, -5, -5, -5, -6, -6, -7, -7, -8, -8, -8, -8, -8, -9, -9, -9, -9, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -11, -10, -11, -11, -11, -10, -10, -9, -9, -9, -8, -8, -7, -7, -7, -7, -6, -6, -6, -5, -5, -5, -4, -4, -4, -4, -4, -3, -3, -3, -3, -2, -2, -2, -2, -2, -1, -1, -1, -1, -0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 2, 3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- /* 75.0 */ 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 1, 1, 0, -0, -1, -1, -2, -2, -2, -3, -4, -4, -5, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -5, -6, -6, -7, -7, -8, -8, -9, -9, -9, -9, -8, -7, -6, -4, -3, -4, -6, -8, -10, -10, -11, -11, -11, -12, -12, -12, -12, -11, -11, -12, -12, -12, -13, -13, -14, -14, -14, -14, -14, -14, -13, -12, -12, -11, -10, -9, -9, -8, -7, -7, -7, -6, -5, -4, -3, -2, -1, 1, 2, 4, 6, 7, 7, 6, 5, 7, 9, 12, 14, 15, 16, 17, 18, 18, 19, 19, 19, 19, 18, 18, 17, 17, 18, 19, 20, 21, 22, 23, 25, 27, 28, 30, 31, 32, 32, 33, 33, 34, 35, 36, 36, 36, 37, 37, 38, 38, 39, 40, 41, 42, 42, 43, 44, 45, 46, 46, 45, 45, 46, 47, 47, 47, 45, 44, 44, 44, 45, 45, 46, 47, 47, 47, 46, 46, 46, 46, 46, 46, 45, 45, 45, 45, 44, 44, 44, 44, 44, 44, 44, 44, 43, 42, 42, 41, 41, 40, 40, 40, 40, 40, 37, 35, 33, 31, 30, 29, 28, 27, 26, 24, 23, 22, 21, 21, 20, 19, 18, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 9, 8, 7, 7, 6, 5, 4, 4, 3, 3, 2, 2, 2, 3, 3, 2, 1, -1, -2, -2, -3, -3, -4, -4, -4, -4, -5, -5, -5, -6, -6, -6, -6, -6, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -8, -8, -8, -8, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -8, -7, -7, -6, -6, -6, -6, -5, -5, -5, -5, -5, -4, -4, -3, -3, -3, -3, -2, -2, -2, -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, -0, -0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- /* 76.0 */ 2, 2, 2, 1, -0, -1, -0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, -1, -1, -1, -1, -1, -1, -1, -2, -3, -3, -3, -3, -3, -3, -3, -4, -4, -4, -5, -5, -6, -6, -6, -7, -7, -8, -8, -8, -8, -8, -7, -6, -5, -5, -5, -5, -5, -6, -7, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -9, -10, -10, -10, -10, -10, -10, -10, -9, -9, -8, -8, -7, -7, -6, -6, -6, -5, -5, -4, -3, -2, -2, -2, -1, -1, -1, -0, 1, 2, 3, 4, 5, 6, 8, 10, 11, 12, 13, 14, 14, 15, 15, 16, 16, 17, 17, 17, 18, 19, 19, 20, 21, 21, 22, 24, 25, 27, 28, 29, 30, 31, 31, 32, 32, 32, 33, 33, 34, 35, 36, 37, 38, 38, 39, 40, 41, 41, 42, 43, 44, 45, 46, 47, 47, 46, 44, 42, 40, 39, 38, 38, 38, 38, 38, 38, 39, 41, 42, 42, 43, 43, 44, 45, 44, 44, 43, 43, 43, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43, 42, 42, 41, 41, 40, 39, 40, 40, 39, 37, 34, 32, 31, 30, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 18, 17, 16, 15, 14, 13, 12, 11, 11, 10, 10, 9, 8, 8, 7, 7, 6, 5, 5, 5, 4, 4, 3, 3, 2, 2, 2, 2, 2, 1, 1, -0, -1, -1, -2, -3, -3, -4, -4, -5, -5, -5, -6, -6, -7, -7, -7, -6, -6, -6, -7, -7, -8, -8, -7, -7, -7, -7, -7, -7, -7, -7, -8, -8, -8, -8, -8, -8, -8, -7, -7, -6, -6, -5, -5, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, -0, -0, -0, -0, -0, -0, -1, -0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1, 2,
- /* 77.0 */ 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 2, 2, 1, 1, 0, -0, -1, -1, -1, -1, -2, -2, -3, -3, -2, -3, -3, -4, -4, -4, -5, -5, -6, -6, -6, -6, -7, -7, -7, -7, -7, -6, -6, -6, -5, -4, -3, -3, -3, -3, -4, -5, -5, -5, -5, -5, -6, -6, -6, -7, -7, -8, -8, -8, -8, -8, -8, -7, -7, -6, -7, -7, -7, -7, -6, -6, -5, -4, -3, -3, -2, -3, -3, -2, -1, -0, 1, 3, 5, 6, 6, 7, 7, 8, 9, 9, 9, 9, 9, 10, 10, 11, 11, 13, 14, 16, 17, 19, 20, 21, 22, 23, 23, 24, 24, 24, 25, 26, 27, 27, 28, 29, 30, 30, 31, 31, 31, 31, 32, 33, 33, 34, 35, 35, 36, 37, 38, 38, 39, 40, 41, 42, 42, 43, 43, 43, 43, 42, 41, 39, 36, 33, 31, 31, 33, 33, 33, 33, 33, 34, 36, 38, 39, 40, 40, 41, 42, 42, 42, 42, 41, 41, 41, 41, 42, 41, 41, 41, 42, 42, 41, 41, 40, 40, 40, 39, 38, 38, 37, 35, 33, 32, 30, 30, 29, 29, 28, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 17, 16, 15, 15, 14, 13, 13, 12, 11, 11, 10, 9, 9, 8, 7, 7, 6, 6, 5, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 0, -1, -2, -2, -3, -3, -3, -3, -3, -3, -4, -4, -4, -4, -4, -5, -5, -5, -6, -6, -6, -6, -6, -6, -6, -6, -6, -7, -7, -7, -7, -7, -7, -7, -6, -5, -5, -5, -4, -4, -4, -4, -4, -3, -2, -2, -2, -2, -2, -2, -1, -0, -0, 0, 0, -0, -0, -1, -0, 0, 0, 1, 1, 1, 2, 2, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2,
- /* 78.0 */ 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 4, 4, 4, 3, 3, 2, 2, 1, 0, 0, -0, -0, -0, -1, -2, -3, -3, -3, -3, -3, -3, -4, -4, -4, -5, -5, -5, -5, -5, -6, -6, -6, -6, -6, -6, -6, -5, -5, -5, -4, -4, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -4, -4, -5, -4, -4, -4, -4, -4, -4, -4, -4, -4, -3, -2, -1, -1, -1, -1, -1, -1, -1, -0, 1, 2, 4, 5, 6, 8, 9, 10, 10, 10, 10, 9, 9, 9, 9, 10, 12, 14, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 26, 27, 28, 28, 29, 29, 30, 30, 30, 30, 31, 31, 31, 32, 32, 33, 33, 33, 34, 34, 34, 35, 35, 36, 37, 37, 38, 38, 39, 39, 39, 38, 37, 36, 35, 34, 32, 31, 30, 29, 30, 30, 31, 31, 31, 31, 31, 33, 35, 36, 36, 36, 37, 38, 39, 40, 39, 39, 38, 38, 38, 39, 39, 39, 40, 40, 40, 39, 39, 39, 39, 38, 37, 35, 34, 32, 32, 32, 31, 30, 29, 29, 29, 28, 27, 26, 24, 24, 23, 22, 21, 20, 19, 19, 18, 17, 17, 16, 16, 15, 14, 14, 13, 13, 12, 12, 11, 10, 10, 9, 9, 8, 7, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 3, 3, 2, 1, 1, 0, -0, -0, -1, -1, -1, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -5, -5, -5, -5, -5, -5, -4, -3, -3, -2, -2, -2, -1, -1, -1, -2, -2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -2, -2, -2, -2, -2, -2, -2, -1, -0, 1, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3,
- /* 79.0 */ 3, 3, 4, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, -0, -1, -1, -1, -2, -2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -3, -3, -2, -1, -1, -0, 0, 1, 1, 0, -0, -1, -1, -1, -1, -1, -1, -1, -0, 0, 1, 1, 1, 0, 1, 1, 1, 2, 2, 3, 4, 5, 6, 6, 6, 5, 5, 5, 5, 6, 8, 9, 10, 11, 11, 11, 10, 8, 8, 7, 7, 7, 8, 9, 11, 12, 14, 15, 17, 18, 20, 21, 22, 23, 24, 25, 26, 26, 27, 27, 28, 28, 29, 29, 30, 30, 31, 32, 32, 33, 33, 34, 34, 35, 35, 35, 35, 36, 36, 36, 37, 37, 37, 36, 35, 34, 33, 32, 31, 30, 29, 29, 28, 28, 29, 29, 30, 30, 30, 30, 31, 31, 32, 33, 34, 35, 36, 37, 37, 36, 36, 35, 36, 36, 37, 37, 37, 37, 38, 38, 39, 39, 38, 38, 37, 37, 36, 35, 35, 35, 34, 33, 32, 30, 29, 28, 28, 27, 26, 25, 24, 24, 23, 22, 22, 21, 20, 20, 19, 18, 18, 17, 17, 16, 15, 15, 14, 14, 14, 13, 13, 12, 11, 11, 10, 10, 9, 9, 8, 8, 8, 7, 7, 6, 6, 6, 5, 5, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, -0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, -2, -2, -1, -1, -0, 0, 0, 1, 1, 1, 1, 1, -0, -1, -2, -3, -3, -3, -3, -2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -2, -2, -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 4, 4, 3, 3, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3,
- /* 80.0 */ 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -1, -1, -1, -1, -1, -2, -2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -1, -1, 0, 1, 2, 2, 3, 4, 4, 5, 5, 4, 4, 3, 3, 2, 2, 2, 2, 2, 3, 3, 4, 5, 5, 6, 8, 9, 10, 11, 11, 11, 10, 9, 8, 8, 8, 9, 10, 12, 13, 15, 15, 15, 15, 14, 13, 12, 10, 9, 8, 7, 7, 8, 9, 10, 11, 13, 14, 15, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 27, 28, 28, 29, 30, 30, 31, 32, 32, 33, 33, 34, 34, 35, 35, 36, 37, 37, 37, 37, 37, 36, 36, 35, 34, 33, 33, 32, 32, 32, 32, 32, 32, 32, 31, 31, 31, 31, 32, 32, 32, 32, 33, 34, 34, 35, 34, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 34, 33, 33, 32, 31, 30, 30, 29, 29, 29, 28, 27, 27, 26, 25, 25, 24, 24, 23, 23, 22, 22, 21, 20, 20, 19, 18, 18, 17, 17, 16, 16, 16, 15, 14, 14, 13, 13, 12, 12, 11, 11, 11, 11, 11, 10, 9, 9, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 1, 0, -0, -0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -0, -0, -0, 0, 0, -0, -0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -0, 0, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 4, 4,
- /* 81.0 */ 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 8, 8, 9, 10, 10, 11, 11, 11, 11, 11, 12, 13, 14, 15, 16, 16, 17, 16, 16, 16, 17, 17, 18, 19, 19, 19, 18, 17, 15, 14, 12, 12, 11, 12, 12, 14, 15, 16, 18, 19, 20, 21, 21, 22, 23, 23, 24, 25, 25, 26, 27, 28, 29, 29, 30, 31, 32, 33, 34, 34, 35, 35, 34, 34, 34, 35, 35, 35, 35, 35, 34, 33, 32, 32, 32, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 32, 33, 33, 33, 32, 31, 31, 31, 31, 32, 32, 33, 33, 32, 32, 32, 32, 32, 32, 32, 32, 31, 31, 31, 31, 31, 31, 31, 30, 30, 30, 29, 29, 28, 28, 28, 28, 27, 27, 26, 26, 25, 25, 24, 24, 23, 23, 22, 21, 21, 20, 20, 19, 19, 18, 18, 18, 18, 17, 17, 16, 16, 16, 15, 15, 15, 14, 14, 14, 14, 13, 13, 12, 12, 11, 10, 10, 9, 9, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4,
- /* 82.0 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 7, 8, 8, 9, 10, 10, 11, 11, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14, 15, 16, 17, 17, 18, 18, 19, 19, 20, 21, 21, 21, 21, 21, 20, 20, 19, 19, 19, 19, 18, 17, 17, 16, 16, 16, 16, 16, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 21, 22, 24, 25, 26, 27, 29, 29, 30, 31, 31, 31, 32, 32, 32, 32, 32, 32, 31, 31, 30, 30, 29, 29, 28, 27, 27, 27, 27, 27, 28, 29, 30, 31, 31, 32, 32, 31, 31, 30, 30, 29, 29, 29, 29, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 32, 31, 31, 31, 30, 30, 29, 28, 28, 27, 27, 26, 26, 26, 26, 25, 24, 24, 23, 23, 22, 22, 22, 22, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 19, 19, 18, 18, 17, 17, 17, 17, 17, 17, 17, 16, 16, 16, 16, 15, 14, 13, 12, 12, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8, 7, 7, 8, 8, 8, 8, 8, 7, 6, 6, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 5, 5, 5, 5, 5, 4, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
- /* 83.0 */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 14, 14, 15, 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 22, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 28, 28, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 29, 29, 29, 28, 28, 28, 28, 28, 28, 28, 28, 27, 27, 27, 27, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 28, 28, 28, 28, 28, 28, 28, 28, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 26, 26, 26, 25, 25, 25, 25, 24, 24, 24, 23, 23, 23, 22, 22, 22, 21, 21, 21, 21, 20, 20, 19, 19, 19, 18, 18, 18, 18, 17, 17, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 14, 14, 13, 13, 12, 12, 12, 11, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 7, 7, 7, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 5, 5, 6, 7, 7, 8, 8, 7, 6, 6, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5,
- /* 84.0 */ 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 23, 23, 23, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 26, 26, 26, 26, 26, 26, 26, 26, 25, 25, 25, 25, 25, 25, 25, 24, 24, 24, 24, 24, 24, 23, 23, 23, 23, 23, 22, 22, 22, 22, 21, 21, 21, 21, 20, 20, 20, 19, 19, 19, 19, 18, 18, 18, 18, 17, 17, 17, 16, 16, 16, 16, 15, 15, 15, 15, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 12, 12, 12, 12, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 9, 9, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 7, 7, 8, 8, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6,
- /* 85.0 */ 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 25, 25, 25, 25, 25, 25, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 23, 23, 23, 22, 22, 22, 21, 21, 21, 21, 20, 20, 20, 20, 20, 20, 19, 19, 19, 19, 18, 18, 18, 18, 18, 17, 17, 17, 17, 17, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9, 10, 10, 9, 9, 9, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8,
- /* 86.0 */ 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 21, 21, 22, 22, 22, 23, 23, 23, 23, 22, 22, 22, 21, 21, 21, 21, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 22, 22, 22, 22, 22, 22, 22, 21, 21, 21, 21, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 19, 19, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 10, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- /* 87.0 */ 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 18, 18, 18, 18, 18, 18, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 11, 11, 10, 10, 9, 9, 9, 9, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- /* 88.0 */ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 13, 13, 13, 13, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- /* 89.0 */ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- /* 90.0 */ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14
};
-#endif // HEIGHT_H_INCLUDED_
+
+#endif // FILTERS_ENABLED
+#endif // HEIGHT_H_INCLUDED_
--- /dev/null
+/*
+ Copyright (C) 2013 Robert Lipe, robertlipe+source@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+#ifndef HEIGHTGRID_H_INCLUDED_
+#define HEIGHTGRID_H_INCLUDED_
+
+/* Created by "tools/createGeoidGrid 1.0 int8_t" using GeographicLib utility GeoidEval with egm96-5. */
+
+#include <cstdint>
+
+#define GEOID_GRID_DEG 1.0
+#define GEOID_SCALE 1.0
+#define GEOID_ROW 181
+#define GEOID_COL 361
+static const int8_t geoid_delta[GEOID_COL* GEOID_ROW]= {
+ /* -180,-179,-178,-177,-176,-175,-174,-173,-172,-171,-170,-169,-168,-167,-166,-165,-164,-163,-162,-161,-160,-159,-158,-157,-156,-155,-154,-153,-152,-151,-150,-149,-148,-147,-146,-145,-144,-143,-142,-141,-140,-139,-138,-137,-136,-135,-134,-133,-132,-131,-130,-129,-128,-127,-126,-125,-124,-123,-122,-121,-120,-119,-118,-117,-116,-115,-114,-113,-112,-111,-110,-109,-108,-107,-106,-105,-104,-103,-102,-101,-100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180 */
+ /* -90.0 */ -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
+ /* -89.0 */ -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
+ /* -88.0 */ -30, -30, -30, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -26, -26, -26, -26, -26, -26, -26, -26, -26, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -26, -26, -26, -26, -26, -26, -26, -26, -26, -27, -27, -27, -27, -27, -27, -27, -27, -28, -28, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -30, -30, -30, -30, -30, -30, -30,
+ /* -87.0 */ -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -30, -30, -30, -30, -30, -30, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -27, -27, -27, -27, -26, -26, -26, -26, -25, -25, -25, -25, -25, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -25, -25, -25, -25, -25, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -25, -25, -25, -24, -24, -24, -23, -23, -23, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -21, -21, -21, -21, -21, -21, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -19, -19, -19, -19, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -20, -20, -20, -20, -20, -20, -20, -20, -20, -21, -21, -21, -21, -21, -21, -22, -22, -22, -22, -22, -22, -22, -22, -22, -23, -23, -23, -23, -23, -23, -24, -24, -24, -24, -24, -24, -25, -25, -25, -25, -25, -26, -26, -26, -26, -27, -27, -27, -27, -28, -28, -28, -28, -28, -29, -29, -29, -29, -30, -30, -30, -30, -30, -30, -30, -31, -31, -31, -31, -31, -31, -31, -31, -31, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -32, -32, -32, -32, -32, -32, -32, -32,
+ /* -86.0 */ -33, -33, -34, -34, -34, -34, -34, -34, -34, -34, -35, -35, -35, -35, -35, -35, -35, -36, -36, -36, -36, -36, -36, -37, -37, -37, -37, -37, -37, -37, -37, -37, -36, -36, -35, -35, -34, -34, -33, -33, -32, -32, -32, -32, -32, -32, -32, -33, -33, -34, -34, -34, -34, -34, -34, -33, -33, -32, -32, -31, -31, -31, -31, -31, -31, -32, -32, -32, -32, -32, -32, -32, -31, -31, -30, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -27, -27, -26, -26, -25, -24, -24, -23, -23, -23, -23, -23, -23, -23, -23, -23, -24, -24, -24, -24, -24, -25, -25, -25, -25, -26, -26, -26, -26, -27, -27, -26, -26, -26, -25, -24, -24, -23, -22, -21, -21, -20, -20, -20, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -17, -17, -17, -17, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -15, -15, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -16, -16, -16, -16, -16, -17, -17, -17, -17, -17, -18, -18, -18, -18, -19, -19, -19, -19, -20, -20, -20, -20, -21, -21, -21, -22, -22, -22, -23, -23, -23, -23, -24, -24, -24, -24, -25, -25, -25, -26, -26, -27, -27, -27, -28, -28, -28, -29, -29, -29, -30, -30, -30, -31, -31, -31, -32, -32, -32, -32, -32, -33, -33, -33, -33, -33, -33, -34, -34, -34, -34, -34, -34, -34, -34, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -35, -35, -35, -35, -34, -34, -34, -34, -33, -33, -33, -33, -33, -33, -33, -33, -33,
+ /* -85.0 */ -37, -38, -39, -39, -40, -40, -40, -39, -39, -39, -39, -39, -40, -40, -41, -41, -41, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -43, -43, -43, -43, -42, -42, -42, -41, -41, -41, -40, -40, -40, -40, -39, -39, -39, -38, -38, -38, -37, -37, -38, -38, -38, -38, -38, -38, -37, -37, -36, -35, -35, -34, -34, -34, -34, -34, -34, -34, -35, -35, -34, -34, -33, -32, -32, -31, -30, -30, -29, -29, -29, -29, -28, -28, -28, -27, -27, -27, -26, -26, -26, -26, -27, -27, -28, -28, -29, -29, -30, -30, -30, -30, -29, -29, -29, -28, -28, -27, -27, -26, -25, -25, -24, -23, -23, -22, -22, -23, -23, -24, -24, -25, -25, -25, -25, -25, -25, -25, -25, -24, -25, -25, -25, -25, -25, -25, -25, -24, -23, -22, -21, -19, -18, -18, -17, -17, -17, -18, -18, -18, -19, -19, -19, -19, -18, -18, -18, -17, -17, -17, -17, -17, -17, -17, -17, -17, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -15, -15, -15, -15, -16, -16, -16, -16, -16, -16, -16, -15, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10, -9, -9, -9, -9, -9, -9, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -12, -12, -12, -13, -13, -14, -14, -14, -15, -15, -16, -16, -16, -17, -17, -18, -18, -19, -19, -20, -20, -20, -21, -21, -21, -22, -22, -22, -23, -23, -24, -24, -24, -25, -25, -26, -26, -26, -27, -28, -28, -29, -29, -30, -30, -31, -32, -32, -32, -33, -33, -34, -34, -34, -35, -35, -35, -35, -35, -35, -35, -36, -36, -36, -36, -36, -36, -36, -36, -37, -37, -37, -37, -36, -36, -36, -36, -36, -37, -37, -37, -37, -37, -37, -37, -36, -36, -36, -35, -35, -36, -36, -37, -37, -38, -38, -38, -37, -37, -36, -35, -35, -34, -34, -35, -36, -37,
+ /* -84.0 */ -44, -45, -45, -45, -45, -45, -45, -45, -44, -44, -44, -44, -45, -45, -45, -45, -44, -44, -44, -44, -44, -44, -44, -44, -45, -45, -45, -45, -44, -44, -44, -44, -43, -43, -43, -43, -42, -42, -42, -41, -41, -41, -41, -41, -41, -40, -40, -40, -40, -40, -39, -39, -39, -39, -39, -39, -39, -38, -38, -38, -37, -37, -36, -36, -36, -36, -36, -35, -35, -34, -34, -33, -32, -32, -31, -31, -30, -30, -30, -30, -30, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -27, -27, -26, -26, -26, -25, -25, -24, -24, -24, -24, -24, -25, -25, -26, -26, -26, -25, -25, -24, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -22, -22, -21, -21, -20, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -18, -19, -19, -19, -19, -18, -18, -18, -18, -17, -17, -17, -16, -16, -16, -15, -15, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -15, -15, -15, -15, -15, -15, -15, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -10, -9, -9, -8, -7, -7, -7, -6, -6, -6, -6, -6, -6, -6, -6, -7, -7, -7, -7, -8, -8, -8, -8, -8, -7, -7, -7, -7, -7, -7, -7, -7, -6, -6, -6, -6, -7, -7, -7, -7, -7, -6, -6, -6, -6, -6, -6, -6, -7, -7, -8, -8, -9, -9, -10, -10, -10, -11, -11, -12, -12, -13, -13, -13, -14, -14, -15, -15, -16, -16, -17, -17, -18, -18, -19, -19, -20, -20, -21, -22, -22, -22, -23, -23, -24, -24, -25, -26, -26, -27, -28, -28, -29, -30, -30, -31, -32, -33, -33, -34, -35, -35, -35, -36, -36, -36, -36, -37, -37, -37, -37, -37, -37, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -37, -37, -37, -36, -36, -35, -35, -34, -34, -34, -34, -34, -34, -34, -35, -36, -37, -38, -39, -41, -41, -42, -42, -42, -42, -42, -42, -43, -43, -44,
+ /* -83.0 */ -45, -45, -46, -46, -46, -46, -46, -46, -46, -46, -47, -47, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -45, -45, -44, -44, -44, -44, -44, -44, -44, -43, -43, -43, -43, -42, -42, -42, -42, -42, -42, -42, -41, -41, -41, -41, -41, -40, -40, -40, -39, -39, -38, -38, -38, -37, -37, -36, -36, -35, -35, -34, -33, -32, -32, -31, -31, -30, -30, -29, -29, -29, -29, -30, -30, -30, -30, -30, -30, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -27, -27, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -25, -24, -24, -23, -22, -22, -21, -21, -20, -20, -20, -21, -21, -21, -21, -21, -21, -20, -20, -19, -19, -18, -18, -18, -18, -17, -17, -17, -17, -17, -18, -18, -18, -18, -18, -17, -16, -16, -15, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -13, -13, -12, -12, -12, -12, -12, -12, -11, -11, -11, -10, -10, -10, -11, -11, -11, -11, -10, -10, -9, -8, -6, -5, -5, -4, -3, -3, -2, -2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -4, -4, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -3, -3, -4, -4, -5, -5, -6, -6, -6, -7, -7, -8, -8, -9, -9, -10, -10, -11, -11, -12, -12, -13, -14, -15, -15, -16, -17, -18, -18, -19, -20, -20, -21, -22, -22, -23, -23, -24, -25, -25, -26, -27, -28, -28, -29, -30, -31, -31, -32, -32, -33, -34, -34, -35, -36, -37, -37, -38, -39, -39, -39, -39, -39, -39, -39, -40, -40, -41, -41, -41, -41, -41, -41, -40, -40, -40, -40, -40, -40, -40, -39, -39, -38, -37, -37, -36, -36, -36, -37, -38, -38, -39, -39, -40, -40, -41, -41, -42, -42, -43, -44, -44, -44, -45, -45, -45, -45, -45, -45,
+ /* -82.0 */ -48, -48, -48, -48, -48, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -48, -48, -48, -48, -48, -48, -47, -47, -47, -46, -46, -46, -46, -46, -45, -45, -45, -45, -45, -45, -44, -44, -44, -43, -43, -43, -42, -42, -42, -42, -42, -42, -41, -41, -41, -40, -39, -39, -38, -38, -37, -37, -36, -36, -35, -35, -35, -34, -34, -33, -33, -33, -32, -32, -31, -31, -30, -30, -30, -30, -30, -30, -30, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -28, -28, -29, -29, -29, -28, -28, -28, -27, -27, -27, -27, -26, -26, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -24, -24, -23, -23, -23, -23, -24, -24, -24, -23, -22, -21, -20, -20, -20, -20, -19, -19, -19, -18, -17, -17, -17, -17, -17, -17, -17, -16, -15, -14, -13, -12, -12, -12, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -11, -10, -10, -10, -10, -10, -9, -9, -9, -9, -9, -9, -9, -8, -8, -8, -7, -7, -6, -6, -5, -5, -4, -3, -2, -1, -0, 0, 1, 1, 1, 1, 1, 1, 0, 0, -0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -0, -0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 0, -0, -1, -1, -2, -3, -3, -4, -4, -5, -6, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16, -16, -17, -18, -19, -19, -20, -21, -21, -22, -23, -24, -25, -26, -26, -27, -28, -29, -30, -31, -31, -32, -33, -33, -34, -35, -36, -37, -38, -39, -40, -41, -41, -40, -40, -41, -41, -42, -43, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -43, -43, -42, -41, -40, -40, -41, -42, -44, -45, -45, -46, -46, -46, -47, -47, -47, -47, -47, -47, -47, -48, -48, -48, -48, -48, -48, -48,
+ /* -81.0 */ -50, -50, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -49, -49, -49, -48, -48, -48, -47, -47, -47, -46, -46, -46, -46, -45, -45, -44, -44, -43, -42, -41, -41, -41, -41, -41, -41, -40, -40, -40, -40, -39, -39, -38, -38, -37, -37, -37, -36, -36, -36, -35, -35, -34, -33, -32, -32, -32, -31, -31, -30, -29, -28, -28, -27, -27, -27, -27, -26, -26, -26, -26, -26, -26, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -26, -26, -25, -25, -25, -25, -24, -24, -23, -23, -23, -23, -23, -23, -24, -24, -24, -24, -25, -25, -25, -25, -25, -25, -25, -24, -24, -23, -23, -22, -22, -22, -21, -21, -20, -20, -20, -20, -20, -20, -19, -19, -18, -18, -17, -16, -16, -16, -16, -16, -15, -15, -15, -14, -14, -13, -13, -13, -13, -13, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10, -9, -9, -9, -9, -8, -8, -7, -7, -7, -7, -7, -6, -6, -6, -6, -5, -5, -4, -3, -3, -2, -2, -1, -1, -0, 0, 1, 2, 2, 3, 3, 3, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 5, 5, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 4, 3, 2, 2, 1, 1, -0, -1, -1, -1, -2, -3, -4, -5, -6, -8, -9, -10, -11, -11, -13, -14, -15, -15, -16, -17, -18, -19, -20, -21, -21, -22, -24, -25, -26, -27, -28, -29, -30, -30, -31, -32, -33, -33, -34, -35, -36, -37, -38, -39, -39, -40, -40, -40, -41, -41, -42, -43, -44, -45, -46, -46, -47, -47, -47, -47, -47, -47, -48, -48, -48, -48, -48, -49, -49, -50, -49, -48, -47, -45, -45, -46, -47, -48, -50, -50, -50, -50, -49, -49, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50,
+ /* -80.0 */ -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -52, -52, -53, -53, -53, -53, -53, -53, -53, -52, -52, -52, -52, -52, -53, -53, -52, -52, -52, -51, -51, -51, -51, -50, -50, -49, -49, -49, -48, -48, -48, -47, -47, -47, -46, -46, -45, -44, -42, -42, -41, -41, -41, -41, -41, -40, -40, -40, -39, -39, -38, -38, -38, -38, -38, -38, -38, -38, -38, -37, -36, -35, -34, -33, -33, -32, -31, -30, -29, -28, -27, -26, -26, -25, -25, -24, -23, -23, -22, -22, -23, -23, -23, -22, -22, -22, -22, -23, -24, -25, -25, -25, -24, -24, -23, -23, -23, -23, -23, -22, -22, -21, -21, -21, -21, -21, -20, -20, -20, -21, -21, -21, -22, -22, -22, -22, -22, -21, -21, -20, -19, -18, -17, -17, -17, -17, -18, -18, -18, -18, -18, -17, -17, -17, -17, -18, -19, -19, -18, -17, -16, -15, -15, -15, -15, -15, -15, -14, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -10, -10, -9, -9, -9, -9, -8, -8, -7, -7, -7, -7, -7, -6, -6, -5, -5, -4, -4, -3, -3, -3, -2, -2, -2, -1, -1, -0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4, 4, 3, 3, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 8, 9, 9, 9, 8, 8, 7, 7, 7, 6, 5, 5, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 5, 4, 4, 3, 3, 2, 2, 1, 0, -0, -1, -1, -2, -3, -4, -6, -7, -8, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -27, -28, -29, -30, -30, -31, -32, -33, -34, -35, -36, -37, -38, -39, -39, -40, -40, -40, -41, -42, -42, -43, -44, -44, -45, -46, -47, -48, -49, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -51, -51, -51, -51, -51, -51, -52, -53, -54, -55, -54, -54, -53, -52, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -52, -52, -52, -52, -53,
+ /* -79.0 */ -54, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -54, -54, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -52, -51, -51, -50, -50, -50, -50, -50, -51, -51, -51, -50, -49, -48, -47, -47, -46, -46, -45, -44, -43, -42, -42, -41, -41, -41, -41, -40, -40, -39, -39, -38, -37, -37, -36, -36, -36, -36, -36, -35, -35, -34, -34, -34, -34, -33, -32, -31, -31, -30, -29, -28, -27, -26, -26, -25, -23, -22, -21, -20, -19, -18, -16, -15, -17, -20, -23, -25, -25, -24, -23, -23, -23, -23, -23, -23, -22, -22, -22, -21, -20, -20, -20, -20, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -17, -17, -16, -15, -15, -15, -15, -16, -16, -16, -16, -16, -15, -15, -15, -15, -14, -15, -15, -15, -14, -13, -12, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10, -9, -9, -9, -9, -8, -8, -8, -7, -7, -6, -6, -5, -5, -5, -5, -5, -5, -5, -4, -3, -3, -2, -2, -1, -1, -0, -0, 0, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 9, 9, 10, 10, 10, 10, 9, 8, 8, 7, 7, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 3, 3, 2, 2, 1, 0, -0, -1, -2, -2, -3, -3, -5, -7, -8, -10, -11, -12, -12, -13, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -26, -27, -28, -29, -30, -31, -32, -33, -34, -35, -36, -37, -38, -39, -40, -41, -41, -41, -42, -42, -43, -44, -44, -45, -46, -47, -48, -49, -50, -51, -51, -52, -52, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -52, -52, -53, -54, -56, -57, -57, -56, -55, -54, -53, -53, -53, -52, -52, -53, -53, -53, -52, -52, -53, -53, -54, -54, -54,
+ /* -78.0 */ -56, -56, -57, -57, -57, -57, -57, -56, -56, -56, -57, -57, -57, -56, -56, -56, -56, -56, -56, -56, -55, -54, -54, -54, -53, -53, -53, -54, -54, -54, -53, -52, -52, -52, -51, -51, -51, -50, -51, -51, -51, -51, -49, -48, -47, -46, -46, -45, -45, -44, -42, -41, -40, -40, -39, -40, -40, -39, -39, -38, -38, -37, -36, -36, -35, -35, -35, -35, -34, -34, -34, -34, -34, -34, -34, -33, -33, -32, -31, -31, -31, -30, -29, -28, -27, -26, -24, -22, -21, -20, -19, -17, -15, -13, -15, -18, -22, -24, -24, -22, -21, -20, -20, -21, -21, -21, -21, -20, -19, -19, -19, -19, -18, -18, -17, -17, -17, -17, -17, -17, -16, -16, -16, -16, -16, -16, -16, -15, -16, -16, -16, -15, -14, -14, -14, -14, -15, -15, -15, -15, -15, -14, -14, -14, -13, -11, -10, -9, -9, -9, -9, -9, -8, -8, -8, -8, -8, -8, -7, -6, -6, -6, -5, -5, -5, -5, -4, -4, -4, -4, -4, -4, -3, -3, -3, -3, -2, -2, -1, -1, -2, -3, -2, -2, -1, -0, 0, 1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 11, 10, 10, 9, 9, 9, 9, 8, 8, 7, 7, 6, 6, 6, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 2, 2, 1, 1, -0, -1, -2, -2, -2, -2, -3, -4, -5, -6, -8, -9, -10, -12, -13, -14, -15, -17, -18, -20, -22, -22, -22, -22, -23, -24, -25, -26, -27, -29, -30, -32, -33, -34, -35, -36, -37, -38, -39, -40, -41, -42, -42, -42, -42, -43, -44, -44, -45, -46, -47, -49, -50, -50, -51, -51, -52, -53, -54, -55, -55, -56, -56, -57, -57, -57, -56, -56, -56, -55, -55, -54, -53, -52, -52, -53, -54, -55, -55, -54, -53, -53, -53, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -55, -56, -56,
+ /* -77.0 */ -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -59, -59, -59, -59, -58, -57, -57, -57, -57, -56, -56, -56, -56, -55, -55, -55, -55, -54, -53, -53, -52, -51, -50, -49, -48, -47, -46, -46, -45, -44, -43, -43, -43, -42, -42, -41, -40, -39, -38, -37, -36, -36, -37, -37, -38, -37, -37, -37, -37, -36, -36, -36, -36, -35, -35, -35, -35, -35, -34, -34, -33, -32, -32, -31, -31, -30, -29, -28, -27, -26, -26, -25, -24, -23, -22, -21, -21, -20, -19, -18, -18, -18, -20, -20, -20, -18, -17, -16, -17, -19, -21, -21, -20, -19, -19, -18, -18, -18, -17, -17, -17, -17, -17, -16, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -10, -9, -7, -5, -5, -4, -3, -3, -2, -2, -2, -1, -1, -1, -2, -1, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 1, 1, 2, 2, 3, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 13, 13, 13, 13, 13, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 10, 10, 9, 9, 10, 10, 10, 9, 8, 7, 7, 6, 6, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 2, 2, 2, 1, 1, 0, 0, -0, -1, -2, -3, -4, -5, -7, -8, -9, -10, -12, -14, -16, -18, -19, -19, -19, -19, -20, -20, -21, -22, -24, -26, -27, -29, -30, -32, -33, -34, -35, -36, -37, -38, -39, -40, -41, -42, -42, -42, -42, -44, -45, -45, -46, -48, -49, -50, -50, -50, -51, -52, -53, -54, -55, -56, -56, -57, -57, -58, -58, -57, -57, -57, -56, -56, -55, -55, -54, -53, -52, -53, -54, -55, -55, -55, -55, -55, -55, -55, -56, -57, -57, -56, -55, -55, -56, -56, -57, -57, -57, -58,
+ /* -76.0 */ -60, -60, -60, -60, -60, -60, -59, -59, -59, -59, -59, -59, -59, -59, -59, -60, -61, -62, -62, -62, -63, -63, -63, -63, -63, -63, -61, -60, -58, -57, -56, -55, -54, -54, -53, -52, -50, -49, -48, -47, -45, -44, -43, -43, -42, -41, -41, -40, -41, -41, -40, -38, -37, -36, -36, -36, -36, -36, -37, -37, -37, -36, -36, -36, -36, -35, -33, -32, -32, -32, -32, -32, -31, -30, -30, -29, -28, -28, -27, -27, -26, -26, -25, -25, -24, -23, -23, -22, -22, -22, -21, -20, -19, -19, -19, -19, -19, -19, -18, -18, -18, -18, -19, -18, -18, -17, -18, -18, -17, -15, -13, -13, -13, -13, -14, -15, -15, -14, -13, -12, -12, -13, -13, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -10, -10, -9, -9, -9, -8, -8, -8, -8, -8, -8, -8, -8, -8, -7, -7, -7, -7, -6, -6, -5, -4, -3, -3, -2, -2, -1, -1, -1, -1, -0, 1, 3, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 7, 7, 8, 8, 8, 9, 9, 10, 10, 10, 11, 12, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 15, 15, 15, 14, 13, 12, 13, 13, 13, 13, 12, 12, 12, 13, 13, 13, 13, 12, 12, 12, 12, 12, 13, 13, 13, 14, 13, 13, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 10, 9, 8, 7, 7, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 3, 4, 4, 3, 0, -2, -4, -5, -5, -6, -7, -8, -9, -10, -12, -13, -15, -16, -17, -18, -18, -19, -20, -21, -23, -24, -26, -28, -29, -30, -32, -33, -35, -35, -36, -37, -37, -38, -39, -40, -41, -41, -41, -42, -43, -45, -46, -47, -49, -50, -50, -50, -50, -51, -52, -53, -54, -55, -56, -56, -57, -57, -58, -58, -58, -58, -57, -57, -56, -56, -57, -57, -56, -55, -54, -55, -57, -58, -58, -58, -57, -57, -57, -57, -58, -58, -58, -58, -57, -58, -58, -58, -59, -59, -60,
+ /* -75.0 */ -62, -62, -62, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -64, -64, -64, -64, -64, -64, -64, -64, -63, -63, -63, -63, -62, -62, -62, -61, -60, -58, -56, -54, -52, -51, -50, -49, -48, -47, -47, -46, -44, -44, -44, -44, -44, -43, -42, -40, -39, -39, -39, -38, -38, -37, -37, -37, -36, -36, -36, -37, -36, -35, -33, -32, -31, -30, -30, -29, -29, -28, -27, -27, -26, -26, -26, -26, -25, -25, -24, -23, -22, -21, -21, -21, -20, -20, -19, -19, -18, -18, -17, -17, -17, -17, -16, -16, -15, -15, -16, -15, -13, -12, -10, -9, -8, -7, -6, -6, -5, -5, -6, -9, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -9, -9, -9, -9, -9, -8, -8, -8, -7, -7, -6, -6, -5, -5, -4, -4, -4, -3, -3, -3, -2, -2, -2, -2, -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, -1, -1, 0, 2, 3, 4, 5, 6, 8, 9, 10, 10, 10, 11, 11, 11, 11, 11, 11, 10, 9, 9, 9, 10, 11, 11, 11, 11, 12, 13, 13, 13, 14, 14, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 16, 16, 15, 15, 15, 16, 16, 16, 15, 14, 15, 16, 16, 16, 16, 16, 16, 16, 15, 15, 16, 17, 17, 16, 15, 15, 15, 14, 14, 14, 13, 12, 12, 12, 13, 13, 13, 12, 11, 10, 9, 9, 9, 8, 8, 8, 8, 8, 7, 7, 7, 6, 6, 6, 6, 6, 5, 5, 5, 4, 2, -0, -2, -3, -4, -5, -6, -7, -8, -9, -11, -12, -14, -15, -16, -17, -18, -19, -21, -23, -25, -26, -27, -29, -30, -31, -32, -33, -34, -35, -36, -36, -37, -37, -38, -39, -41, -42, -42, -43, -43, -45, -46, -48, -48, -48, -48, -49, -50, -51, -51, -52, -53, -54, -55, -55, -56, -57, -57, -57, -58, -58, -58, -58, -58, -58, -58, -58, -59, -58, -56, -54, -54, -55, -57, -58, -58, -58, -58, -58, -59, -59, -59, -59, -59, -59, -59, -59, -60, -61, -62,
+ /* -74.0 */ -61, -62, -63, -63, -64, -65, -65, -65, -65, -66, -66, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -64, -64, -64, -63, -63, -63, -63, -62, -62, -61, -61, -60, -59, -59, -58, -58, -57, -56, -55, -53, -51, -50, -49, -49, -49, -49, -47, -45, -43, -43, -43, -41, -40, -39, -39, -38, -38, -37, -37, -37, -37, -38, -38, -38, -36, -35, -33, -32, -31, -31, -30, -30, -29, -28, -28, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -19, -19, -18, -18, -18, -17, -16, -16, -16, -16, -17, -16, -16, -14, -13, -13, -13, -12, -11, -10, -8, -7, -6, -6, -5, -3, -2, -1, -1, -1, -2, -4, -6, -7, -7, -7, -8, -8, -7, -7, -6, -6, -5, -5, -5, -5, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -3, -3, -2, -1, -1, -0, -0, -1, -1, -1, -2, -2, -1, -1, -0, 1, 1, 2, 2, 3, 3, 3, 4, 5, 6, 7, 7, 8, 9, 10, 11, 13, 14, 14, 13, 13, 12, 11, 11, 12, 13, 14, 14, 15, 15, 16, 16, 16, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 19, 18, 18, 18, 18, 19, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 20, 20, 20, 20, 20, 19, 18, 18, 18, 19, 19, 18, 18, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 17, 16, 14, 12, 12, 12, 13, 13, 13, 12, 11, 10, 10, 9, 9, 9, 8, 8, 7, 7, 6, 5, 5, 4, 3, 1, -0, -2, -3, -4, -6, -7, -8, -9, -11, -12, -14, -15, -17, -18, -20, -21, -24, -26, -27, -28, -29, -29, -30, -31, -32, -33, -34, -35, -36, -36, -37, -38, -39, -40, -41, -42, -42, -42, -44, -46, -47, -46, -45, -46, -47, -49, -50, -50, -50, -51, -51, -52, -53, -55, -56, -56, -57, -57, -58, -58, -58, -58, -59, -59, -59, -58, -57, -55, -53, -50, -48, -49, -53, -56, -58, -59, -58, -59, -59, -59, -59, -59, -59, -60, -60, -60, -61, -61,
+ /* -73.0 */ -61, -61, -62, -63, -64, -64, -65, -65, -66, -66, -66, -66, -66, -65, -65, -65, -65, -65, -65, -65, -64, -64, -64, -64, -63, -63, -63, -62, -62, -61, -61, -60, -60, -59, -58, -58, -57, -57, -56, -55, -55, -54, -53, -52, -52, -51, -50, -50, -49, -47, -46, -45, -44, -42, -40, -40, -40, -39, -38, -38, -37, -36, -36, -35, -35, -35, -34, -34, -33, -33, -32, -32, -31, -31, -29, -28, -27, -26, -25, -25, -24, -23, -22, -22, -22, -21, -21, -21, -20, -18, -18, -18, -18, -17, -17, -17, -16, -16, -15, -15, -14, -13, -12, -11, -10, -9, -8, -7, -5, -3, -2, -1, 0, 1, 2, 3, 3, 2, -1, -3, -4, -4, -4, -5, -4, -3, -3, -2, -2, -2, -2, -1, -1, -1, -2, -2, -2, -3, -3, -4, -4, -4, -5, -5, -4, -4, -3, -3, -3, -2, -2, -2, -2, -2, -2, -2, -2, -1, 0, 1, 2, 3, 4, 6, 7, 7, 7, 7, 8, 8, 8, 9, 11, 13, 15, 15, 14, 13, 12, 13, 13, 14, 15, 16, 17, 18, 18, 19, 18, 18, 18, 18, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 19, 19, 20, 23, 23, 22, 21, 21, 21, 20, 21, 22, 22, 22, 21, 22, 22, 23, 23, 24, 23, 22, 22, 21, 21, 21, 22, 22, 21, 21, 20, 20, 19, 19, 19, 19, 19, 19, 20, 21, 21, 20, 20, 20, 20, 20, 19, 17, 14, 12, 13, 14, 15, 16, 16, 14, 13, 13, 13, 12, 11, 11, 10, 9, 8, 7, 6, 5, 5, 4, 3, 2, 0, -0, -1, -3, -5, -7, -8, -9, -11, -13, -15, -17, -18, -20, -22, -24, -27, -28, -29, -28, -29, -30, -31, -31, -32, -33, -33, -34, -35, -36, -37, -38, -39, -40, -40, -38, -39, -41, -43, -43, -43, -43, -45, -46, -48, -50, -49, -49, -49, -50, -51, -52, -53, -54, -55, -56, -57, -57, -57, -58, -58, -58, -59, -58, -58, -56, -55, -54, -52, -51, -51, -52, -55, -58, -58, -57, -57, -58, -58, -58, -58, -59, -60, -61, -61, -61, -61,
+ /* -72.0 */ -62, -62, -62, -62, -63, -64, -65, -66, -66, -66, -66, -65, -65, -65, -65, -65, -64, -64, -64, -64, -63, -63, -63, -63, -62, -62, -62, -61, -61, -60, -60, -59, -59, -59, -58, -57, -56, -56, -55, -54, -54, -53, -52, -52, -51, -51, -50, -49, -48, -47, -46, -45, -45, -44, -44, -43, -42, -41, -40, -39, -38, -37, -35, -34, -33, -33, -33, -33, -32, -32, -31, -31, -30, -30, -29, -28, -27, -26, -25, -24, -23, -23, -22, -21, -21, -22, -22, -22, -20, -18, -17, -17, -17, -16, -15, -15, -15, -14, -13, -13, -12, -12, -11, -10, -9, -7, -6, -4, -2, -0, 2, 2, 3, 4, 6, 7, 7, 6, 3, 1, -0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, -2, -2, -2, -2, -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -0, -0, 0, 1, 2, 4, 6, 7, 8, 8, 8, 9, 10, 10, 10, 12, 14, 14, 13, 13, 13, 12, 12, 13, 13, 14, 16, 17, 18, 17, 17, 16, 15, 16, 15, 15, 16, 16, 16, 17, 18, 17, 17, 18, 19, 20, 21, 23, 23, 21, 20, 21, 22, 22, 22, 22, 23, 25, 26, 26, 26, 26, 26, 25, 25, 24, 22, 21, 22, 23, 24, 24, 24, 24, 23, 21, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 20, 18, 16, 14, 13, 13, 13, 13, 14, 15, 15, 15, 15, 15, 14, 13, 13, 12, 11, 10, 9, 8, 6, 5, 5, 4, 3, 2, 1, -1, -3, -5, -6, -8, -9, -11, -12, -14, -16, -17, -19, -20, -22, -24, -26, -27, -27, -28, -29, -30, -31, -32, -32, -32, -32, -33, -34, -35, -36, -37, -38, -37, -37, -38, -39, -40, -40, -41, -42, -43, -45, -48, -50, -51, -51, -50, -50, -51, -52, -52, -53, -54, -55, -56, -57, -57, -57, -58, -57, -57, -57, -56, -54, -53, -55, -56, -57, -56, -55, -55, -56, -55, -53, -54, -56, -58, -58, -58, -59, -60, -61, -61, -62, -62,
+ /* -71.0 */ -61, -61, -62, -63, -64, -65, -65, -65, -64, -65, -66, -65, -64, -64, -64, -64, -63, -63, -63, -63, -62, -62, -62, -61, -61, -61, -61, -60, -60, -59, -59, -58, -58, -57, -57, -56, -56, -55, -54, -53, -53, -52, -51, -51, -50, -49, -48, -47, -47, -46, -45, -44, -43, -43, -42, -42, -41, -40, -40, -40, -39, -39, -38, -38, -37, -36, -36, -35, -34, -34, -33, -32, -32, -30, -28, -27, -27, -26, -25, -24, -24, -23, -22, -22, -22, -21, -20, -18, -17, -17, -16, -15, -14, -14, -14, -14, -14, -13, -12, -11, -11, -10, -10, -8, -7, -6, -4, -3, -1, 0, 3, 4, 5, 7, 10, 11, 11, 10, 8, 5, 4, 3, 2, 1, 1, -0, -1, -2, -2, -1, -1, -1, -1, -1, -1, -0, -0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 5, 7, 8, 10, 11, 11, 11, 11, 11, 11, 10, 11, 11, 11, 13, 13, 13, 12, 13, 13, 14, 14, 14, 13, 12, 12, 11, 11, 11, 12, 13, 14, 15, 16, 16, 16, 18, 20, 22, 22, 22, 22, 21, 20, 20, 21, 22, 22, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 24, 25, 25, 26, 26, 25, 24, 23, 23, 23, 23, 22, 23, 23, 22, 21, 23, 25, 25, 25, 23, 21, 18, 15, 15, 16, 16, 16, 16, 16, 16, 15, 16, 16, 15, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 3, 1, -1, -2, -4, -5, -6, -7, -9, -10, -11, -13, -14, -15, -17, -18, -19, -20, -22, -24, -25, -26, -27, -27, -28, -29, -30, -31, -31, -32, -32, -33, -34, -34, -35, -35, -36, -37, -38, -39, -39, -40, -42, -43, -44, -46, -47, -48, -49, -49, -50, -51, -52, -52, -52, -53, -55, -56, -57, -57, -57, -58, -57, -57, -57, -56, -54, -55, -57, -59, -59, -60, -59, -58, -58, -58, -57, -57, -58, -59, -59, -59, -59, -60, -61, -61, -61, -61,
+ /* -70.0 */ -62, -62, -63, -64, -64, -64, -64, -64, -63, -63, -63, -63, -63, -63, -62, -62, -62, -62, -62, -62, -61, -61, -61, -60, -60, -60, -60, -59, -58, -58, -57, -57, -56, -56, -55, -55, -54, -54, -53, -52, -52, -51, -50, -49, -48, -47, -47, -46, -45, -45, -44, -43, -42, -41, -40, -40, -40, -40, -39, -38, -37, -36, -36, -36, -35, -35, -34, -34, -34, -33, -33, -33, -32, -32, -31, -31, -30, -29, -28, -27, -26, -26, -27, -27, -27, -25, -22, -21, -22, -22, -21, -19, -17, -15, -13, -12, -11, -10, -10, -10, -10, -9, -7, -6, -4, -4, -3, -2, 0, 2, 4, 5, 7, 10, 12, 13, 13, 11, 8, 6, 5, 4, 4, 4, 2, 1, -1, -1, -1, -0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 4, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 11, 11, 10, 11, 13, 14, 14, 14, 15, 15, 15, 15, 15, 14, 14, 14, 14, 16, 17, 17, 17, 18, 18, 17, 16, 16, 17, 19, 20, 21, 21, 21, 21, 20, 20, 21, 21, 20, 21, 22, 21, 21, 20, 19, 20, 21, 22, 23, 25, 27, 27, 26, 27, 27, 26, 27, 27, 28, 28, 28, 27, 26, 26, 26, 25, 26, 26, 25, 26, 28, 28, 26, 24, 22, 20, 17, 17, 17, 17, 17, 17, 16, 16, 16, 15, 16, 16, 15, 14, 14, 13, 12, 11, 11, 9, 8, 8, 7, 6, 4, 3, 1, -1, -2, -4, -6, -7, -9, -10, -12, -13, -14, -16, -17, -18, -18, -19, -19, -22, -24, -24, -25, -26, -27, -28, -29, -30, -30, -31, -32, -32, -33, -34, -34, -36, -37, -37, -38, -38, -39, -42, -44, -44, -43, -43, -44, -45, -46, -47, -49, -51, -51, -51, -52, -54, -55, -55, -56, -57, -56, -56, -56, -56, -55, -55, -56, -57, -57, -57, -57, -57, -58, -59, -59, -59, -59, -58, -58, -59, -59, -59, -60, -60, -61, -61, -62,
+ /* -69.0 */ -61, -61, -61, -62, -63, -63, -63, -63, -62, -61, -61, -60, -60, -60, -60, -59, -59, -59, -59, -59, -59, -59, -58, -59, -58, -58, -57, -57, -57, -56, -56, -55, -55, -54, -54, -53, -52, -52, -51, -51, -50, -49, -49, -48, -47, -46, -45, -45, -44, -43, -42, -42, -41, -40, -40, -39, -39, -38, -37, -36, -36, -36, -35, -35, -34, -34, -34, -33, -33, -32, -32, -31, -31, -31, -30, -29, -29, -28, -28, -27, -26, -26, -25, -25, -25, -24, -22, -21, -19, -17, -16, -16, -16, -15, -14, -14, -13, -12, -11, -9, -8, -7, -7, -6, -4, -3, -2, 0, 3, 4, 5, 6, 7, 9, 11, 12, 11, 9, 8, 7, 7, 6, 7, 7, 6, 5, 3, 3, 3, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 4, 4, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 7, 7, 8, 8, 9, 10, 9, 9, 9, 9, 10, 11, 10, 10, 11, 11, 12, 13, 13, 14, 14, 14, 15, 16, 15, 15, 16, 16, 16, 15, 15, 15, 16, 16, 16, 17, 17, 18, 18, 18, 19, 21, 23, 23, 23, 24, 24, 22, 21, 21, 21, 23, 24, 24, 25, 27, 28, 28, 28, 26, 27, 29, 31, 33, 34, 32, 30, 30, 30, 29, 28, 28, 27, 27, 28, 29, 29, 27, 25, 23, 22, 20, 19, 18, 17, 16, 16, 16, 16, 17, 17, 17, 16, 15, 14, 14, 13, 13, 12, 11, 11, 10, 9, 9, 8, 8, 7, 5, 2, 0, -2, -5, -6, -8, -10, -11, -13, -15, -16, -17, -18, -18, -19, -19, -20, -22, -23, -24, -25, -26, -26, -27, -28, -29, -30, -30, -31, -32, -33, -35, -36, -37, -37, -37, -37, -37, -40, -43, -43, -42, -42, -43, -44, -44, -46, -47, -48, -50, -51, -51, -52, -53, -53, -54, -54, -53, -53, -53, -53, -54, -55, -55, -55, -56, -57, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -59, -60, -60, -60, -60, -61, -61,
+ /* -68.0 */ -58, -59, -60, -61, -61, -62, -61, -60, -59, -58, -58, -58, -58, -58, -57, -57, -57, -56, -56, -56, -56, -56, -56, -56, -56, -55, -55, -55, -55, -54, -54, -53, -53, -52, -52, -51, -50, -50, -49, -49, -48, -48, -47, -46, -46, -45, -44, -44, -43, -42, -41, -40, -40, -39, -38, -38, -37, -37, -36, -36, -36, -35, -35, -34, -33, -33, -32, -32, -31, -31, -30, -30, -30, -29, -29, -28, -28, -28, -27, -26, -26, -25, -24, -24, -23, -22, -22, -21, -20, -19, -18, -17, -16, -15, -14, -14, -13, -12, -11, -11, -10, -9, -8, -7, -5, -3, -1, 1, 2, 3, 5, 6, 7, 7, 8, 8, 9, 9, 9, 8, 9, 8, 9, 10, 9, 8, 7, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 8, 8, 8, 9, 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 14, 14, 15, 16, 15, 14, 15, 15, 15, 14, 14, 15, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 18, 19, 22, 23, 23, 23, 24, 25, 25, 25, 25, 25, 24, 25, 26, 26, 27, 29, 30, 32, 35, 36, 37, 38, 38, 36, 34, 34, 34, 32, 31, 30, 30, 30, 29, 28, 27, 27, 25, 24, 23, 21, 20, 19, 18, 17, 17, 17, 18, 17, 16, 15, 15, 14, 13, 13, 12, 10, 10, 11, 9, 9, 10, 9, 7, 6, 4, 2, 1, -2, -3, -5, -8, -9, -11, -12, -13, -14, -16, -17, -18, -18, -18, -18, -19, -22, -24, -25, -26, -26, -27, -28, -29, -29, -29, -30, -31, -34, -35, -36, -37, -37, -37, -37, -37, -39, -41, -41, -41, -41, -41, -43, -44, -45, -46, -48, -49, -50, -51, -52, -52, -52, -53, -53, -52, -51, -51, -51, -51, -53, -53, -54, -55, -55, -55, -55, -55, -55, -55, -55, -56, -56, -57, -57, -57, -58, -58, -59, -59, -59, -58,
+ /* -67.0 */ -58, -58, -59, -58, -58, -57, -56, -56, -56, -56, -56, -55, -55, -55, -55, -54, -54, -54, -54, -54, -54, -54, -53, -53, -53, -52, -52, -52, -51, -51, -51, -51, -50, -49, -49, -48, -47, -47, -46, -46, -46, -46, -45, -45, -44, -44, -43, -42, -42, -41, -40, -39, -38, -38, -37, -37, -36, -36, -36, -35, -35, -35, -34, -34, -33, -32, -32, -31, -31, -30, -29, -29, -29, -28, -28, -27, -27, -27, -26, -26, -25, -25, -24, -23, -22, -21, -21, -20, -19, -18, -17, -16, -16, -14, -13, -13, -12, -11, -10, -10, -9, -7, -6, -5, -4, -2, -1, 2, 4, 5, 6, 8, 9, 9, 9, 10, 11, 12, 12, 11, 11, 11, 12, 12, 13, 12, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 9, 9, 10, 10, 11, 11, 11, 11, 12, 13, 13, 13, 14, 15, 15, 15, 16, 16, 16, 16, 16, 16, 15, 16, 16, 16, 16, 16, 15, 15, 16, 16, 17, 17, 18, 18, 18, 18, 20, 22, 22, 22, 23, 23, 23, 24, 25, 26, 26, 26, 26, 27, 29, 31, 32, 33, 34, 36, 39, 41, 41, 39, 35, 33, 32, 31, 30, 30, 29, 28, 27, 26, 26, 24, 23, 24, 25, 25, 24, 22, 20, 19, 18, 18, 18, 17, 16, 16, 16, 15, 14, 14, 12, 10, 10, 10, 9, 8, 8, 6, 4, 3, 1, -1, -1, -2, -3, -3, -6, -8, -9, -11, -12, -13, -15, -17, -18, -18, -18, -17, -18, -22, -25, -26, -27, -28, -28, -28, -29, -29, -30, -31, -32, -34, -36, -37, -37, -36, -37, -38, -39, -40, -40, -40, -40, -40, -41, -42, -43, -44, -45, -47, -48, -49, -49, -49, -49, -49, -49, -49, -49, -48, -49, -50, -50, -50, -51, -51, -51, -50, -50, -51, -52, -53, -53, -53, -54, -54, -55, -56, -56, -56, -57, -57, -57, -58, -58,
+ /* -66.0 */ -55, -54, -53, -53, -54, -54, -54, -54, -54, -53, -53, -53, -53, -52, -52, -52, -52, -52, -52, -52, -52, -51, -51, -50, -50, -50, -50, -50, -49, -49, -48, -48, -47, -47, -46, -45, -45, -45, -44, -43, -43, -43, -43, -43, -42, -42, -42, -41, -41, -40, -39, -38, -38, -37, -36, -36, -35, -35, -34, -34, -34, -33, -33, -32, -32, -32, -31, -30, -30, -29, -28, -28, -27, -27, -26, -26, -25, -25, -25, -24, -24, -23, -23, -22, -21, -20, -20, -19, -19, -17, -16, -16, -15, -14, -13, -12, -12, -11, -10, -8, -7, -7, -5, -4, -3, -2, -0, 1, 2, 5, 7, 9, 10, 11, 12, 13, 14, 15, 16, 15, 15, 14, 14, 15, 16, 16, 14, 13, 13, 12, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 10, 10, 10, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 16, 16, 17, 17, 18, 19, 18, 18, 18, 17, 17, 17, 18, 18, 18, 17, 17, 18, 18, 18, 19, 19, 20, 19, 19, 22, 23, 23, 23, 23, 23, 24, 24, 25, 25, 26, 27, 27, 28, 29, 30, 30, 31, 33, 34, 35, 37, 36, 34, 32, 31, 30, 28, 27, 26, 25, 25, 25, 25, 24, 24, 24, 23, 22, 21, 20, 20, 19, 18, 17, 15, 15, 15, 16, 16, 15, 14, 13, 12, 12, 10, 9, 8, 7, 5, 3, 1, 0, -0, -1, -3, -2, -1, -2, -3, -6, -8, -10, -12, -14, -14, -15, -15, -16, -18, -19, -21, -22, -23, -24, -25, -25, -26, -27, -28, -29, -30, -31, -32, -33, -35, -36, -36, -37, -37, -38, -39, -39, -40, -41, -42, -42, -42, -42, -43, -44, -45, -45, -45, -46, -46, -46, -45, -46, -47, -49, -48, -47, -47, -47, -47, -47, -48, -48, -48, -48, -49, -49, -49, -50, -51, -52, -52, -52, -53, -54, -54, -55, -55, -55, -55, -55, -55,
+ /* -65.0 */ -52, -51, -51, -52, -51, -51, -51, -51, -51, -51, -51, -50, -50, -50, -50, -50, -49, -49, -49, -49, -49, -49, -48, -48, -48, -47, -47, -47, -46, -46, -46, -45, -45, -44, -44, -43, -43, -42, -42, -42, -42, -42, -41, -41, -41, -41, -40, -40, -39, -39, -38, -37, -37, -36, -35, -35, -34, -33, -33, -33, -32, -32, -31, -31, -31, -30, -30, -30, -29, -28, -28, -27, -26, -26, -26, -25, -25, -24, -24, -23, -23, -22, -22, -21, -20, -20, -18, -17, -17, -16, -15, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -2, -1, 0, 1, 2, 4, 5, 6, 8, 11, 13, 14, 15, 15, 16, 18, 18, 18, 18, 18, 18, 19, 19, 16, 15, 15, 14, 13, 13, 14, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 12, 13, 12, 12, 12, 11, 11, 11, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 11, 11, 11, 12, 12, 14, 15, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 19, 19, 20, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 21, 21, 21, 20, 21, 23, 24, 24, 25, 26, 26, 26, 27, 28, 28, 28, 28, 29, 30, 30, 31, 30, 30, 30, 31, 31, 30, 30, 30, 29, 29, 28, 27, 27, 27, 27, 27, 26, 25, 25, 25, 24, 23, 22, 21, 20, 20, 20, 19, 18, 18, 16, 15, 14, 14, 14, 13, 12, 11, 10, 8, 7, 6, 5, 4, 4, 3, 3, 1, 0, -1, -1, -2, -4, -7, -8, -9, -11, -12, -13, -15, -17, -18, -19, -19, -20, -20, -21, -22, -25, -27, -29, -31, -32, -32, -32, -33, -33, -34, -35, -35, -35, -36, -36, -37, -38, -39, -41, -42, -43, -44, -44, -44, -44, -45, -45, -45, -45, -46, -46, -46, -46, -45, -45, -44, -44, -44, -44, -44, -44, -44, -44, -44, -45, -46, -46, -47, -47, -48, -49, -49, -50, -51, -51, -52, -52, -52, -52, -52, -52, -52, -52,
+ /* -64.0 */ -51, -51, -50, -50, -50, -50, -50, -49, -49, -49, -48, -48, -48, -48, -47, -47, -47, -47, -47, -46, -46, -45, -45, -45, -45, -45, -44, -43, -43, -43, -43, -42, -42, -42, -42, -41, -41, -40, -40, -40, -40, -39, -39, -39, -39, -39, -38, -38, -37, -37, -36, -36, -35, -35, -34, -33, -33, -32, -32, -31, -31, -31, -30, -30, -29, -29, -29, -28, -28, -27, -27, -26, -26, -25, -25, -24, -24, -23, -23, -23, -22, -21, -21, -20, -19, -18, -17, -17, -16, -15, -14, -13, -13, -12, -12, -11, -10, -9, -8, -6, -5, -4, -3, -1, 0, 1, 2, 3, 4, 6, 7, 8, 10, 11, 14, 16, 17, 18, 18, 19, 21, 21, 21, 21, 22, 22, 20, 18, 17, 15, 15, 16, 16, 17, 17, 17, 17, 17, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 14, 14, 14, 13, 13, 12, 12, 12, 12, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 12, 13, 13, 14, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 20, 20, 20, 21, 21, 20, 20, 20, 20, 21, 21, 21, 21, 21, 22, 22, 22, 23, 23, 23, 23, 24, 25, 26, 27, 27, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 29, 29, 28, 28, 27, 27, 27, 26, 26, 26, 25, 24, 23, 23, 22, 22, 22, 21, 20, 19, 18, 16, 15, 15, 14, 13, 12, 11, 10, 8, 7, 5, 4, 3, 3, 2, 2, 0, 0, -0, -2, -4, -8, -9, -10, -11, -12, -13, -16, -18, -19, -20, -21, -22, -22, -22, -23, -25, -27, -28, -30, -31, -32, -33, -34, -35, -36, -37, -37, -38, -39, -40, -40, -41, -41, -41, -41, -41, -41, -41, -41, -42, -43, -44, -44, -43, -43, -42, -42, -42, -42, -42, -42, -41, -41, -41, -41, -41, -41, -41, -41, -42, -43, -43, -44, -45, -45, -46, -47, -47, -48, -48, -48, -48, -49, -50, -50, -50, -51, -51, -51,
+ /* -63.0 */ -50, -50, -49, -49, -49, -49, -48, -48, -47, -47, -47, -46, -46, -45, -45, -45, -44, -44, -44, -43, -43, -43, -42, -42, -42, -41, -41, -41, -40, -40, -40, -40, -39, -39, -39, -39, -38, -38, -38, -38, -38, -37, -37, -37, -37, -36, -36, -36, -35, -35, -35, -34, -33, -33, -33, -32, -32, -31, -30, -30, -30, -29, -29, -28, -28, -28, -27, -27, -26, -26, -26, -25, -25, -24, -24, -23, -23, -22, -22, -21, -21, -20, -20, -19, -18, -17, -17, -16, -15, -14, -13, -13, -12, -12, -11, -10, -10, -8, -7, -6, -5, -4, -3, -1, 0, 2, 3, 4, 5, 6, 8, 9, 10, 12, 13, 14, 15, 15, 17, 19, 21, 22, 23, 24, 24, 23, 22, 22, 21, 20, 20, 19, 19, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16, 15, 15, 14, 14, 14, 13, 13, 13, 12, 12, 12, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 13, 14, 14, 14, 15, 16, 17, 17, 18, 18, 19, 20, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 25, 24, 25, 26, 27, 27, 28, 29, 29, 30, 30, 31, 31, 30, 30, 31, 31, 30, 29, 29, 29, 29, 29, 29, 30, 30, 30, 31, 30, 30, 30, 29, 29, 29, 28, 27, 27, 26, 26, 26, 25, 25, 24, 24, 24, 23, 22, 21, 20, 18, 18, 18, 17, 16, 14, 13, 12, 10, 8, 7, 6, 4, 3, 2, 0, -1, -2, -3, -4, -6, -7, -8, -9, -10, -12, -13, -13, -15, -16, -18, -20, -21, -22, -23, -23, -24, -25, -27, -28, -29, -30, -31, -32, -32, -33, -34, -34, -35, -36, -37, -38, -39, -39, -40, -40, -40, -41, -41, -41, -41, -41, -40, -40, -40, -40, -39, -39, -39, -39, -39, -39, -38, -38, -37, -38, -38, -37, -38, -38, -39, -40, -40, -41, -42, -42, -43, -43, -44, -44, -45, -46, -47, -49, -49, -50, -50, -50, -50, -50, -50,
+ /* -62.0 */ -49, -49, -49, -48, -48, -48, -47, -47, -46, -46, -45, -45, -44, -44, -43, -43, -42, -42, -42, -41, -41, -40, -40, -40, -39, -39, -38, -38, -38, -37, -37, -37, -37, -36, -36, -36, -36, -36, -36, -36, -35, -35, -35, -34, -34, -34, -33, -33, -33, -32, -32, -32, -31, -31, -31, -30, -30, -30, -29, -29, -28, -27, -27, -27, -26, -26, -26, -26, -25, -25, -25, -24, -24, -23, -23, -22, -22, -21, -21, -21, -20, -19, -19, -18, -17, -16, -16, -15, -15, -14, -13, -12, -12, -11, -10, -10, -9, -8, -7, -6, -5, -3, -2, -1, 1, 2, 3, 4, 6, 7, 8, 10, 12, 13, 14, 15, 15, 14, 14, 15, 18, 21, 22, 22, 22, 23, 23, 22, 21, 20, 20, 20, 20, 21, 22, 23, 22, 22, 21, 19, 19, 19, 20, 20, 20, 20, 19, 20, 19, 20, 19, 19, 19, 19, 18, 18, 18, 17, 16, 16, 16, 15, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 15, 16, 17, 18, 19, 20, 20, 21, 22, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 26, 26, 26, 26, 27, 27, 28, 29, 30, 30, 31, 32, 32, 32, 32, 32, 32, 31, 31, 31, 31, 31, 31, 30, 30, 31, 31, 31, 31, 31, 31, 31, 30, 30, 30, 29, 28, 28, 28, 28, 27, 27, 26, 26, 25, 25, 24, 23, 22, 22, 22, 21, 21, 20, 19, 17, 15, 13, 12, 10, 9, 7, 6, 4, 2, 1, -0, -1, -2, -3, -5, -6, -7, -8, -9, -9, -10, -11, -13, -14, -15, -16, -18, -19, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30, -31, -32, -32, -33, -34, -34, -35, -35, -36, -36, -36, -37, -37, -38, -38, -38, -39, -39, -38, -37, -37, -37, -37, -37, -36, -36, -36, -36, -35, -35, -34, -35, -35, -35, -35, -35, -36, -37, -37, -38, -39, -39, -40, -41, -42, -43, -45, -47, -48, -48, -48, -48, -49, -49, -49, -49, -49, -49,
+ /* -61.0 */ -48, -47, -47, -47, -47, -46, -46, -45, -45, -45, -44, -43, -43, -43, -42, -42, -41, -41, -40, -40, -39, -39, -38, -37, -37, -36, -36, -35, -35, -35, -35, -34, -34, -34, -34, -34, -34, -33, -33, -33, -33, -32, -32, -32, -32, -32, -31, -30, -30, -30, -29, -29, -28, -28, -28, -29, -28, -27, -27, -26, -26, -25, -25, -25, -25, -25, -24, -24, -24, -24, -24, -23, -22, -22, -21, -21, -21, -20, -20, -19, -18, -18, -17, -17, -16, -15, -15, -14, -14, -13, -12, -12, -11, -10, -9, -8, -8, -7, -6, -5, -4, -3, -2, -0, 1, 2, 3, 5, 7, 8, 9, 11, 12, 14, 15, 17, 17, 18, 18, 18, 17, 16, 15, 16, 21, 23, 24, 24, 22, 21, 21, 21, 21, 23, 25, 26, 26, 24, 21, 18, 20, 20, 21, 22, 21, 22, 22, 22, 22, 22, 22, 22, 21, 19, 17, 17, 17, 16, 17, 18, 18, 18, 17, 17, 16, 16, 16, 16, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 26, 26, 26, 27, 28, 28, 28, 28, 28, 29, 29, 30, 31, 31, 32, 32, 33, 33, 33, 33, 33, 33, 32, 32, 32, 32, 32, 31, 31, 31, 31, 31, 31, 31, 32, 32, 32, 31, 31, 31, 30, 30, 30, 30, 29, 29, 28, 28, 27, 27, 26, 26, 25, 25, 24, 24, 23, 23, 22, 21, 19, 17, 14, 12, 11, 9, 8, 6, 5, 3, 2, 1, 0, -1, -2, -4, -5, -6, -7, -8, -8, -9, -10, -11, -13, -14, -15, -16, -17, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30, -30, -31, -31, -32, -33, -33, -34, -34, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -34, -34, -34, -34, -33, -33, -33, -33, -32, -31, -32, -32, -33, -33, -33, -33, -34, -35, -36, -37, -38, -39, -40, -41, -43, -45, -45, -46, -46, -47, -47, -48, -48, -48, -48, -48, -48, -48,
+ /* -60.0 */ -46, -46, -46, -45, -45, -45, -44, -44, -44, -43, -43, -43, -42, -41, -41, -40, -40, -39, -39, -38, -37, -37, -36, -35, -35, -34, -34, -33, -33, -33, -32, -32, -32, -32, -31, -31, -31, -31, -31, -30, -30, -30, -30, -30, -29, -29, -29, -28, -28, -27, -27, -27, -27, -26, -26, -25, -25, -24, -24, -24, -24, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -22, -21, -21, -20, -20, -20, -19, -18, -18, -17, -16, -16, -15, -14, -14, -14, -13, -12, -12, -11, -10, -9, -9, -8, -7, -7, -6, -5, -4, -4, -2, -1, 0, 1, 2, 4, 6, 7, 8, 9, 12, 13, 15, 16, 17, 17, 18, 18, 19, 20, 21, 21, 20, 20, 20, 21, 21, 21, 20, 20, 19, 18, 19, 17, 16, 16, 18, 20, 21, 22, 21, 20, 21, 22, 23, 23, 23, 24, 24, 24, 23, 22, 18, 13, 10, 13, 18, 20, 20, 21, 21, 21, 21, 20, 19, 18, 18, 18, 17, 17, 16, 16, 16, 16, 15, 15, 15, 16, 15, 15, 16, 16, 16, 16, 17, 17, 17, 18, 19, 20, 21, 22, 23, 23, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 28, 28, 29, 29, 29, 29, 29, 30, 31, 32, 32, 32, 33, 33, 34, 34, 34, 35, 34, 34, 34, 34, 33, 33, 33, 33, 33, 33, 33, 33, 32, 32, 33, 33, 33, 32, 32, 31, 31, 31, 31, 31, 31, 30, 29, 29, 28, 27, 27, 27, 28, 27, 26, 26, 25, 25, 24, 22, 21, 17, 14, 12, 11, 10, 9, 8, 7, 5, 4, 3, 2, 0, -1, -2, -3, -4, -5, -7, -7, -8, -9, -10, -11, -12, -14, -15, -16, -17, -18, -20, -21, -22, -23, -24, -25, -26, -26, -27, -28, -28, -29, -30, -30, -31, -31, -32, -32, -33, -33, -33, -33, -33, -33, -33, -33, -33, -32, -32, -31, -31, -31, -30, -30, -30, -30, -29, -29, -30, -31, -31, -31, -31, -31, -33, -35, -36, -37, -38, -39, -40, -41, -42, -43, -44, -44, -45, -46, -46, -46, -47, -47, -47, -47, -46, -46,
+ /* -59.0 */ -45, -44, -44, -44, -44, -43, -43, -43, -42, -42, -41, -41, -41, -40, -39, -39, -38, -37, -37, -36, -35, -35, -34, -33, -33, -32, -32, -31, -31, -30, -30, -30, -30, -29, -29, -29, -29, -29, -28, -28, -28, -28, -27, -27, -27, -27, -27, -27, -26, -25, -25, -24, -24, -23, -23, -23, -23, -22, -22, -22, -21, -21, -21, -21, -21, -22, -22, -22, -22, -21, -20, -20, -19, -20, -19, -18, -17, -17, -16, -16, -16, -15, -14, -14, -13, -12, -12, -12, -11, -11, -10, -9, -9, -8, -7, -6, -6, -5, -4, -3, -2, -2, -1, 1, 2, 3, 4, 6, 7, 9, 11, 12, 13, 15, 16, 17, 17, 18, 19, 20, 19, 19, 20, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 20, 20, 19, 20, 20, 21, 20, 21, 21, 22, 22, 23, 23, 24, 24, 24, 23, 22, 20, 15, 9, 15, 18, 20, 21, 21, 21, 21, 21, 21, 21, 20, 20, 20, 20, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 17, 17, 17, 18, 18, 18, 19, 19, 20, 21, 22, 22, 23, 24, 24, 25, 25, 26, 26, 26, 27, 28, 28, 28, 29, 29, 30, 30, 30, 31, 32, 32, 33, 33, 34, 34, 35, 35, 36, 36, 36, 36, 36, 36, 36, 35, 35, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 33, 33, 33, 32, 31, 32, 32, 32, 32, 31, 30, 30, 29, 29, 30, 30, 30, 29, 29, 27, 26, 25, 24, 23, 19, 16, 14, 13, 12, 12, 10, 9, 8, 7, 6, 5, 3, 2, 0, -1, -2, -3, -4, -6, -7, -8, -8, -9, -11, -12, -13, -14, -15, -16, -18, -19, -20, -21, -22, -23, -24, -24, -25, -26, -27, -27, -28, -29, -29, -30, -30, -30, -30, -30, -31, -31, -31, -31, -31, -30, -30, -30, -30, -29, -29, -29, -28, -28, -28, -27, -27, -27, -27, -28, -29, -29, -29, -30, -34, -34, -33, -34, -36, -37, -38, -39, -40, -41, -41, -42, -43, -44, -44, -45, -45, -45, -45, -45, -45, -45, -45,
+ /* -58.0 */ -43, -43, -43, -42, -42, -42, -41, -41, -41, -40, -40, -39, -38, -38, -37, -37, -36, -35, -34, -34, -33, -33, -32, -31, -31, -30, -30, -29, -29, -28, -28, -28, -27, -27, -27, -27, -27, -27, -26, -26, -26, -26, -26, -25, -25, -25, -24, -23, -23, -23, -22, -22, -21, -21, -21, -21, -21, -20, -20, -20, -20, -20, -19, -20, -20, -20, -19, -19, -19, -19, -19, -18, -18, -17, -17, -17, -16, -16, -15, -15, -14, -14, -13, -13, -12, -11, -11, -11, -10, -9, -8, -8, -8, -7, -6, -6, -5, -4, -3, -2, -1, -0, 1, 1, 3, 4, 5, 7, 8, 10, 11, 13, 13, 15, 15, 16, 16, 17, 18, 19, 20, 20, 20, 20, 20, 20, 20, 20, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 19, 19, 20, 20, 20, 20, 21, 21, 22, 22, 23, 24, 24, 24, 23, 22, 20, 15, 10, 15, 18, 20, 20, 20, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 20, 19, 19, 19, 19, 19, 19, 19, 19, 20, 21, 22, 23, 23, 24, 25, 26, 26, 27, 28, 27, 28, 28, 29, 29, 30, 31, 32, 32, 33, 33, 34, 34, 35, 35, 36, 37, 37, 37, 37, 37, 37, 38, 38, 37, 37, 37, 36, 36, 35, 35, 35, 35, 35, 35, 35, 34, 34, 34, 34, 34, 33, 32, 31, 32, 31, 31, 30, 30, 30, 30, 30, 30, 30, 29, 28, 28, 26, 25, 23, 21, 18, 16, 15, 15, 14, 13, 12, 10, 9, 8, 7, 6, 4, 3, 1, -0, -1, -2, -4, -5, -6, -7, -8, -9, -10, -11, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -24, -25, -26, -26, -27, -27, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -27, -27, -27, -26, -26, -26, -26, -26, -26, -26, -26, -27, -27, -28, -28, -32, -32, -28, -31, -32, -34, -35, -36, -37, -38, -39, -39, -41, -41, -42, -42, -42, -42, -42, -42, -43, -43, -43, -43,
+ /* -57.0 */ -40, -40, -40, -40, -39, -39, -39, -39, -39, -38, -37, -37, -36, -36, -35, -35, -34, -33, -33, -32, -31, -31, -30, -30, -29, -28, -28, -27, -27, -27, -26, -26, -26, -25, -25, -25, -25, -25, -25, -24, -23, -23, -22, -22, -22, -22, -22, -21, -21, -21, -20, -20, -20, -20, -19, -19, -18, -18, -19, -19, -19, -18, -18, -17, -17, -17, -17, -17, -17, -16, -16, -16, -16, -16, -16, -15, -15, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -10, -9, -9, -9, -8, -7, -7, -6, -5, -4, -3, -2, -1, -0, 1, 2, 3, 4, 5, 6, 6, 7, 8, 8, 9, 12, 14, 13, 14, 15, 16, 17, 18, 19, 20, 20, 20, 20, 19, 18, 19, 19, 18, 18, 18, 19, 19, 18, 19, 18, 18, 18, 19, 19, 20, 20, 20, 21, 21, 21, 22, 23, 23, 23, 23, 22, 20, 16, 8, 9, 16, 19, 20, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 23, 23, 24, 24, 24, 25, 24, 23, 23, 23, 23, 22, 22, 22, 22, 21, 20, 20, 19, 20, 20, 20, 20, 21, 22, 23, 25, 25, 26, 27, 28, 28, 29, 29, 29, 29, 30, 30, 31, 32, 32, 33, 34, 34, 35, 36, 36, 37, 38, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 38, 38, 37, 37, 36, 36, 36, 36, 36, 36, 35, 35, 35, 35, 35, 35, 35, 35, 35, 34, 35, 34, 34, 34, 32, 31, 31, 30, 29, 29, 28, 26, 23, 20, 19, 18, 17, 16, 16, 15, 13, 12, 11, 10, 9, 8, 6, 5, 4, 2, 1, -1, -2, -3, -4, -5, -7, -8, -9, -10, -11, -12, -14, -15, -16, -17, -18, -19, -20, -21, -22, -22, -23, -24, -24, -25, -26, -26, -26, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -26, -25, -25, -25, -24, -24, -24, -24, -24, -24, -24, -25, -25, -25, -26, -26, -30, -30, -27, -30, -29, -31, -33, -34, -35, -36, -36, -37, -38, -38, -39, -39, -40, -40, -40, -40, -40, -40, -40, -40,
+ /* -56.0 */ -37, -37, -38, -37, -37, -37, -37, -36, -36, -35, -35, -34, -34, -33, -33, -32, -32, -31, -30, -30, -30, -29, -28, -27, -27, -27, -26, -26, -25, -25, -24, -24, -24, -24, -23, -23, -23, -23, -22, -21, -21, -20, -20, -20, -20, -20, -20, -20, -20, -19, -19, -19, -18, -19, -18, -17, -17, -16, -15, -15, -14, -14, -14, -14, -14, -14, -14, -15, -14, -14, -14, -15, -14, -14, -14, -14, -14, -13, -12, -12, -12, -11, -11, -11, -11, -11, -11, -10, -9, -9, -8, -7, -7, -6, -5, -4, -3, -2, -2, -1, 1, 2, 3, 4, 5, 5, 5, 5, 4, 6, 11, 14, 15, 16, 14, 13, 14, 15, 16, 17, 18, 18, 19, 18, 17, 18, 18, 17, 17, 17, 18, 18, 18, 18, 17, 17, 17, 17, 17, 18, 18, 19, 19, 19, 19, 20, 21, 21, 21, 21, 21, 21, 21, 17, 5, 5, 15, 19, 20, 20, 21, 20, 20, 20, 21, 21, 22, 22, 22, 23, 23, 24, 24, 25, 26, 25, 25, 25, 25, 25, 24, 24, 24, 24, 24, 24, 23, 22, 22, 22, 22, 22, 22, 23, 24, 25, 26, 27, 28, 29, 29, 30, 31, 31, 31, 31, 32, 31, 32, 33, 34, 35, 35, 36, 37, 37, 38, 39, 40, 41, 41, 41, 42, 41, 41, 41, 41, 41, 41, 40, 40, 39, 39, 39, 38, 38, 37, 37, 37, 36, 36, 35, 35, 35, 35, 36, 36, 35, 34, 34, 33, 33, 33, 33, 32, 31, 31, 30, 29, 27, 24, 22, 20, 19, 19, 18, 17, 16, 15, 14, 13, 12, 10, 9, 8, 7, 5, 4, 3, 1, 0, -1, -2, -4, -5, -6, -7, -9, -10, -11, -12, -13, -15, -16, -17, -18, -19, -20, -21, -21, -22, -23, -23, -24, -25, -25, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -25, -25, -25, -24, -23, -23, -23, -22, -22, -22, -23, -23, -23, -23, -24, -24, -24, -24, -25, -25, -26, -27, -28, -28, -29, -31, -32, -32, -31, -32, -33, -34, -35, -36, -37, -37, -37, -37, -37, -37, -37, -37, -37,
+ /* -55.0 */ -34, -35, -35, -35, -35, -34, -34, -34, -33, -33, -32, -32, -31, -31, -31, -30, -30, -30, -29, -28, -27, -27, -26, -26, -25, -25, -24, -24, -24, -23, -23, -23, -23, -23, -23, -22, -21, -21, -20, -20, -20, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -17, -16, -16, -15, -15, -14, -14, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -12, -12, -11, -11, -10, -10, -10, -10, -10, -10, -10, -8, -7, -6, -5, -5, -5, -4, -3, -3, -2, -1, 1, 2, 3, 4, 5, 5, 3, 3, 7, 10, 11, 13, 14, 14, 14, 14, 12, 11, 12, 13, 15, 17, 17, 18, 18, 17, 15, 14, 14, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 17, 16, 17, 19, 21, 23, 21, 17, 11, 12, 10, 8, 7, 4, 3, 8, 15, 18, 20, 21, 20, 20, 21, 21, 21, 22, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 27, 27, 27, 27, 26, 26, 26, 26, 26, 26, 26, 25, 25, 24, 24, 24, 25, 26, 27, 28, 29, 30, 31, 32, 32, 33, 33, 33, 34, 33, 33, 34, 34, 35, 35, 36, 37, 38, 39, 40, 41, 43, 44, 44, 45, 45, 44, 44, 44, 44, 44, 43, 42, 41, 41, 41, 41, 40, 39, 39, 38, 38, 37, 37, 36, 36, 35, 35, 35, 35, 34, 35, 35, 35, 35, 34, 34, 34, 33, 33, 32, 30, 28, 25, 23, 21, 20, 19, 19, 18, 17, 15, 14, 13, 12, 10, 9, 8, 7, 5, 4, 2, 2, 0, -1, -2, -3, -5, -6, -7, -9, -10, -11, -12, -13, -15, -16, -17, -18, -19, -20, -20, -21, -22, -22, -23, -24, -24, -25, -25, -25, -25, -25, -25, -25, -25, -24, -25, -24, -24, -24, -24, -23, -23, -22, -22, -21, -21, -21, -21, -21, -22, -22, -22, -22, -22, -22, -22, -23, -23, -23, -22, -23, -26, -26, -27, -27, -28, -27, -26, -25, -26, -28, -30, -32, -33, -34, -34, -33, -33, -33, -34, -34, -34,
+ /* -54.0 */ -31, -32, -32, -31, -31, -31, -31, -31, -31, -30, -30, -29, -29, -29, -28, -28, -28, -27, -27, -26, -26, -25, -25, -24, -24, -23, -23, -23, -23, -23, -23, -22, -21, -21, -21, -20, -20, -20, -19, -19, -18, -18, -18, -18, -17, -17, -18, -19, -19, -18, -18, -17, -16, -15, -15, -14, -14, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -12, -12, -12, -12, -12, -11, -10, -10, -9, -9, -9, -9, -9, -8, -7, -6, -6, -5, -5, -4, -4, -3, -2, -1, 0, 2, 3, 4, 5, 5, 4, 4, 9, 12, 10, 9, 10, 12, 12, 12, 12, 11, 10, 9, 10, 11, 10, 10, 10, 9, 7, 7, 9, 12, 13, 12, 11, 11, 12, 14, 14, 14, 13, 14, 16, 16, 15, 17, 18, 18, 17, 12, 12, 13, 13, 13, 14, 14, 13, 14, 15, 17, 19, 21, 21, 21, 21, 21, 22, 22, 22, 23, 23, 23, 24, 25, 25, 25, 26, 26, 27, 27, 27, 28, 28, 28, 27, 27, 27, 27, 28, 28, 27, 27, 26, 26, 27, 27, 28, 28, 28, 29, 29, 31, 31, 32, 33, 34, 35, 36, 36, 36, 37, 34, 35, 36, 36, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 47, 47, 47, 46, 45, 45, 44, 45, 43, 43, 44, 45, 43, 41, 41, 40, 39, 38, 38, 38, 37, 36, 36, 35, 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 34, 33, 31, 27, 24, 23, 24, 22, 20, 20, 18, 17, 16, 14, 13, 12, 11, 9, 8, 7, 6, 4, 3, 1, 0, -1, -2, -4, -5, -6, -7, -9, -10, -11, -12, -14, -15, -16, -17, -18, -19, -20, -20, -21, -22, -22, -23, -23, -24, -24, -25, -24, -24, -24, -24, -24, -24, -23, -23, -23, -23, -23, -22, -22, -22, -21, -20, -20, -20, -20, -19, -21, -21, -21, -21, -21, -21, -21, -21, -22, -22, -22, -22, -19, -23, -22, -23, -23, -24, -22, -22, -22, -22, -23, -24, -24, -26, -28, -29, -30, -30, -31, -31, -31, -31,
+ /* -53.0 */ -28, -28, -29, -28, -29, -29, -28, -28, -28, -28, -27, -27, -26, -26, -26, -26, -25, -25, -25, -24, -24, -23, -23, -22, -22, -23, -23, -22, -21, -21, -21, -20, -20, -20, -20, -19, -19, -19, -18, -18, -18, -18, -18, -19, -20, -20, -20, -19, -18, -17, -17, -16, -16, -15, -14, -14, -13, -13, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -10, -10, -9, -9, -8, -8, -8, -8, -8, -7, -6, -6, -5, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 5, 5, 9, 11, 10, 10, 9, 9, 11, 12, 12, 12, 13, 13, 12, 12, 11, 11, 11, 10, 10, 8, 6, 5, 5, 6, 7, 6, 4, 6, 8, 6, 4, 4, 6, 6, 4, 3, 3, 5, 10, 11, 12, 13, 15, 15, 16, 16, 16, 16, 16, 16, 17, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 27, 28, 28, 28, 28, 27, 27, 27, 27, 27, 27, 26, 26, 26, 27, 27, 27, 28, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36, 36, 37, 38, 38, 38, 37, 36, 37, 37, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 48, 48, 51, 50, 47, 46, 47, 45, 44, 45, 43, 43, 42, 41, 41, 41, 39, 38, 37, 37, 36, 35, 35, 35, 35, 35, 35, 34, 34, 35, 37, 40, 39, 37, 35, 34, 32, 30, 28, 26, 24, 23, 22, 20, 19, 17, 16, 15, 13, 12, 11, 9, 8, 7, 5, 4, 3, 1, -0, -1, -3, -4, -5, -6, -8, -9, -10, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -21, -21, -22, -23, -23, -24, -24, -24, -24, -24, -23, -23, -23, -23, -23, -22, -22, -22, -22, -21, -21, -20, -20, -19, -19, -19, -19, -19, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -17, -19, -19, -20, -21, -20, -19, -19, -19, -18, -18, -19, -20, -21, -23, -26, -27, -27, -28, -28, -28,
+ /* -52.0 */ -25, -25, -25, -26, -26, -26, -26, -25, -25, -24, -24, -24, -24, -24, -23, -23, -23, -23, -22, -22, -21, -21, -21, -22, -22, -21, -20, -20, -20, -20, -19, -19, -19, -19, -19, -18, -18, -18, -18, -18, -18, -19, -20, -19, -19, -19, -19, -18, -18, -17, -17, -16, -15, -15, -14, -13, -13, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -12, -12, -12, -12, -11, -11, -11, -11, -11, -10, -10, -10, -9, -9, -8, -8, -8, -7, -7, -7, -6, -5, -5, -4, -3, -2, -1, -0, 1, 2, 3, 4, 5, 5, 5, 7, 13, 13, 13, 11, 10, 9, 10, 10, 10, 11, 12, 13, 14, 14, 14, 12, 12, 12, 12, 11, 10, 9, 8, 7, 6, 6, 6, 5, 4, 4, 5, 5, 5, 5, 5, 6, 7, 8, 10, 11, 10, 13, 15, 15, 15, 16, 15, 15, 15, 18, 17, 18, 19, 19, 20, 20, 21, 22, 22, 23, 24, 24, 25, 25, 26, 26, 27, 27, 27, 28, 28, 28, 27, 27, 27, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 29, 30, 31, 31, 33, 33, 34, 35, 35, 36, 36, 36, 36, 37, 37, 37, 38, 37, 36, 39, 39, 38, 39, 40, 41, 43, 44, 45, 46, 47, 49, 49, 47, 47, 47, 47, 47, 46, 45, 44, 44, 43, 43, 43, 42, 42, 41, 40, 39, 38, 37, 37, 36, 36, 36, 35, 35, 35, 34, 35, 37, 38, 38, 38, 37, 36, 33, 30, 29, 28, 27, 25, 23, 22, 21, 19, 18, 16, 15, 14, 12, 11, 9, 8, 6, 5, 4, 2, 1, -1, -2, -3, -5, -6, -7, -8, -10, -11, -12, -13, -14, -16, -17, -18, -19, -19, -20, -21, -21, -22, -22, -23, -23, -24, -24, -24, -23, -23, -23, -22, -22, -22, -22, -21, -21, -21, -20, -20, -20, -19, -19, -19, -18, -18, -18, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -18, -18, -18, -15, -16, -17, -17, -18, -18, -15, -16, -16, -15, -16, -16, -17, -17, -19, -21, -23, -24, -24, -24, -25,
+ /* -51.0 */ -21, -21, -21, -21, -22, -23, -23, -22, -22, -21, -21, -21, -21, -21, -21, -21, -21, -21, -20, -20, -20, -20, -21, -20, -20, -20, -19, -19, -19, -18, -18, -18, -17, -17, -17, -18, -18, -17, -17, -18, -19, -18, -18, -18, -18, -18, -18, -18, -18, -17, -16, -15, -15, -14, -13, -13, -12, -12, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -9, -8, -8, -8, -7, -7, -7, -6, -6, -5, -4, -4, -3, -2, -1, -0, 1, 2, 2, 3, 5, 5, 5, 5, 9, 14, 15, 15, 13, 11, 10, 10, 10, 10, 11, 12, 13, 13, 12, 12, 13, 13, 13, 12, 11, 10, 10, 9, 7, 6, 6, 6, 6, 5, 6, 6, 8, 9, 8, 7, 6, 6, 7, 7, 8, 8, 10, 10, 11, 12, 12, 13, 13, 15, 16, 17, 17, 18, 19, 20, 20, 21, 22, 23, 23, 24, 25, 25, 26, 26, 26, 27, 27, 28, 28, 27, 27, 27, 27, 27, 26, 26, 25, 25, 25, 25, 25, 25, 26, 26, 27, 27, 27, 29, 31, 31, 32, 32, 33, 34, 34, 34, 35, 35, 36, 36, 37, 37, 38, 36, 38, 40, 40, 39, 40, 41, 42, 43, 44, 46, 46, 46, 47, 46, 47, 46, 46, 46, 45, 45, 44, 44, 44, 44, 43, 43, 41, 41, 40, 39, 38, 38, 37, 37, 36, 36, 37, 37, 36, 35, 38, 39, 38, 38, 37, 36, 33, 31, 30, 29, 28, 27, 25, 24, 22, 20, 19, 18, 16, 15, 13, 12, 11, 9, 8, 6, 5, 3, 2, 0, -1, -3, -4, -5, -7, -8, -9, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -21, -21, -22, -23, -23, -23, -24, -24, -24, -23, -23, -23, -22, -22, -21, -21, -21, -20, -20, -20, -19, -19, -19, -19, -18, -18, -18, -17, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -17, -16, -15, -14, -12, -12, -14, -14, -11, -12, -12, -12, -13, -13, -14, -14, -15, -16, -18, -20, -20, -21, -21,
+ /* -50.0 */ -17, -17, -17, -15, -17, -19, -20, -19, -19, -19, -19, -19, -19, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -17, -17, -16, -16, -16, -16, -16, -17, -17, -16, -17, -18, -18, -18, -17, -17, -17, -18, -18, -18, -18, -17, -17, -17, -16, -15, -14, -14, -13, -12, -12, -12, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -10, -10, -10, -10, -9, -9, -9, -8, -8, -7, -7, -7, -6, -6, -5, -4, -3, -3, -2, -1, -0, 0, 1, 2, 3, 4, 5, 6, 5, 6, 10, 13, 16, 16, 14, 13, 11, 10, 10, 11, 11, 11, 12, 13, 13, 13, 12, 12, 11, 11, 9, 8, 6, 4, 3, 3, 2, 2, 2, 2, 2, 3, 5, 6, 6, 6, 3, 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11, 12, 14, 15, 16, 17, 18, 19, 20, 20, 21, 22, 23, 23, 25, 25, 26, 26, 27, 27, 27, 27, 27, 27, 27, 26, 26, 26, 25, 25, 25, 25, 24, 25, 25, 24, 25, 24, 25, 25, 26, 26, 27, 28, 30, 31, 31, 32, 33, 33, 34, 34, 35, 35, 35, 36, 37, 37, 38, 38, 40, 40, 40, 41, 41, 42, 43, 43, 44, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 44, 44, 44, 43, 43, 42, 41, 40, 39, 38, 37, 37, 36, 39, 40, 39, 37, 39, 41, 40, 37, 37, 36, 35, 33, 32, 31, 30, 29, 27, 26, 24, 23, 22, 20, 19, 17, 16, 14, 13, 11, 10, 9, 7, 6, 4, 2, 1, -1, -2, -4, -5, -6, -8, -9, -10, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -21, -22, -22, -23, -23, -23, -24, -24, -24, -24, -23, -23, -23, -22, -22, -22, -21, -20, -20, -19, -19, -18, -18, -19, -18, -18, -17, -17, -17, -18, -18, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -16, -15, -14, -13, -13, -11, -10, -12, -10, -9, -10, -10, -10, -10, -10, -10, -11, -12, -13, -13, -14, -15, -17,
+ /* -49.0 */ -10, -12, -14, -15, -16, -16, -16, -16, -17, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -17, -16, -16, -15, -15, -15, -15, -15, -15, -16, -16, -15, -16, -16, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -16, -16, -15, -15, -14, -13, -13, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10, -9, -9, -10, -10, -10, -10, -10, -10, -10, -10, -10, -9, -9, -9, -8, -7, -7, -7, -7, -6, -6, -5, -4, -3, -3, -2, -1, -1, 0, 1, 2, 3, 3, 4, 5, 6, 6, 6, 10, 15, 16, 17, 16, 15, 13, 12, 12, 11, 11, 11, 11, 12, 11, 11, 11, 10, 10, 9, 7, 6, 3, 1, -0, -1, -1, -1, -1, -1, -1, 0, 1, 1, 2, 2, 1, 1, 2, 3, 3, 4, 4, 6, 6, 7, 8, 9, 12, 13, 14, 15, 16, 17, 19, 20, 21, 21, 23, 23, 24, 25, 26, 27, 27, 27, 28, 27, 27, 26, 26, 25, 25, 25, 24, 24, 24, 24, 23, 24, 24, 25, 24, 24, 25, 23, 25, 26, 27, 28, 28, 29, 30, 30, 31, 32, 33, 33, 33, 34, 34, 34, 35, 35, 37, 38, 39, 40, 42, 42, 42, 42, 43, 43, 42, 43, 44, 44, 45, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 44, 44, 43, 42, 41, 41, 40, 39, 38, 38, 38, 37, 37, 38, 39, 41, 41, 40, 38, 36, 34, 33, 32, 31, 30, 29, 28, 26, 25, 24, 22, 21, 20, 18, 17, 15, 14, 12, 11, 9, 8, 6, 5, 3, 2, 0, -2, -3, -5, -6, -8, -9, -10, -12, -13, -14, -15, -17, -18, -19, -19, -20, -21, -22, -22, -23, -23, -23, -24, -24, -24, -24, -24, -24, -24, -23, -23, -22, -22, -21, -21, -20, -20, -19, -18, -18, -17, -18, -18, -17, -17, -17, -17, -17, -17, -16, -16, -14, -15, -16, -16, -16, -16, -16, -15, -15, -14, -12, -12, -11, -10, -11, -8, -9, -6, -7, -8, -8, -8, -7, -7, -7, -7, -8, -9, -9, -9, -10,
+ /* -48.0 */ -5, -8, -11, -12, -13, -13, -13, -13, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -14, -13, -14, -14, -14, -14, -14, -15, -15, -16, -16, -16, -16, -17, -17, -17, -17, -17, -17, -17, -16, -16, -15, -15, -15, -14, -14, -13, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10, -10, -9, -9, -10, -10, -10, -10, -10, -10, -10, -9, -9, -9, -9, -8, -8, -7, -7, -7, -6, -6, -5, -4, -3, -2, -2, -1, -1, -0, 1, 2, 2, 3, 4, 5, 6, 7, 7, 7, 11, 15, 16, 17, 18, 16, 15, 14, 12, 11, 11, 11, 11, 11, 11, 11, 10, 8, 7, 5, 4, 2, 1, -0, -1, -2, -2, -2, -3, -3, -3, -2, -1, -1, -1, -1, -0, -0, 0, 1, 2, 2, 3, 4, 6, 7, 8, 10, 11, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 26, 27, 28, 28, 28, 27, 27, 26, 25, 25, 24, 24, 24, 24, 23, 23, 23, 22, 23, 23, 24, 24, 26, 25, 26, 26, 26, 27, 28, 29, 30, 30, 31, 32, 32, 32, 32, 33, 33, 33, 34, 34, 35, 37, 39, 40, 41, 44, 44, 44, 43, 43, 43, 43, 44, 44, 44, 43, 44, 44, 45, 45, 45, 45, 45, 45, 45, 44, 44, 43, 43, 42, 41, 40, 38, 38, 37, 36, 36, 36, 39, 39, 40, 40, 39, 37, 35, 33, 32, 31, 30, 29, 28, 27, 25, 24, 23, 22, 20, 19, 17, 16, 15, 13, 11, 10, 8, 7, 5, 4, 2, 1, -1, -3, -4, -6, -7, -9, -10, -12, -13, -14, -16, -17, -18, -19, -20, -21, -22, -22, -23, -24, -24, -24, -24, -25, -25, -25, -25, -25, -24, -24, -24, -23, -23, -22, -22, -21, -20, -20, -19, -18, -18, -17, -18, -17, -17, -17, -16, -16, -16, -15, -14, -14, -14, -15, -15, -15, -15, -15, -15, -14, -14, -13, -11, -10, -9, -8, -11, -10, -6, -3, -4, -5, -5, -6, -5, -5, -5, -5, -6, -5, -5, -4, -5,
+ /* -47.0 */ -5, -7, -8, -8, -9, -9, -10, -10, -10, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -14, -14, -14, -14, -15, -15, -15, -16, -16, -17, -17, -17, -16, -16, -16, -16, -16, -15, -15, -14, -14, -14, -13, -13, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10, -9, -9, -9, -10, -10, -10, -10, -9, -9, -9, -9, -9, -8, -7, -7, -7, -6, -6, -6, -5, -5, -4, -3, -2, -1, -0, 0, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 13, 18, 20, 20, 17, 16, 14, 13, 12, 12, 12, 11, 12, 11, 11, 9, 7, 6, 4, 2, 0, -1, -1, -2, -3, -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -2, -2, -2, -1, 0, 2, 3, 4, 6, 7, 9, 11, 12, 14, 15, 16, 17, 19, 20, 21, 23, 23, 25, 26, 26, 27, 28, 27, 27, 27, 27, 27, 25, 25, 24, 24, 24, 23, 23, 23, 22, 22, 22, 22, 23, 24, 25, 26, 25, 26, 26, 26, 27, 27, 28, 29, 30, 31, 31, 32, 32, 33, 33, 33, 33, 33, 34, 34, 35, 37, 40, 41, 43, 45, 45, 45, 44, 46, 43, 45, 44, 43, 43, 44, 45, 46, 46, 45, 45, 46, 48, 48, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 34, 36, 38, 37, 36, 36, 35, 33, 32, 31, 30, 29, 28, 26, 25, 24, 23, 22, 20, 19, 18, 16, 15, 13, 12, 10, 9, 7, 6, 4, 2, 1, -1, -2, -4, -6, -7, -9, -10, -12, -13, -15, -16, -17, -19, -20, -21, -21, -22, -23, -24, -25, -25, -25, -25, -25, -26, -26, -26, -25, -25, -25, -25, -24, -24, -23, -23, -22, -21, -20, -20, -19, -18, -17, -17, -18, -17, -17, -17, -16, -16, -15, -13, -12, -13, -14, -14, -14, -14, -13, -13, -13, -12, -12, -11, -11, -9, -7, -7, -7, -8, -4, -2, 1, 1, -1, -2, -2, -2, -2, -3, -3, -3, -3, -4, -5,
+ /* -46.0 */ -2, -3, -4, -4, -4, -5, -5, -6, -7, -8, -9, -9, -10, -10, -10, -10, -11, -10, -10, -10, -10, -10, -10, -10, -9, -10, -10, -11, -11, -12, -12, -13, -13, -14, -14, -14, -15, -15, -15, -16, -16, -16, -16, -16, -16, -16, -15, -15, -15, -15, -14, -14, -13, -13, -13, -12, -12, -11, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -9, -9, -9, -9, -9, -8, -8, -7, -6, -6, -6, -5, -5, -4, -4, -3, -3, -2, -1, -0, 0, 1, 2, 2, 4, 5, 5, 7, 8, 9, 10, 11, 11, 15, 18, 23, 23, 19, 16, 15, 14, 13, 12, 12, 12, 12, 11, 10, 9, 5, 4, 2, 0, -0, -1, -2, -3, -3, -4, -4, -4, -4, -4, -3, -4, -4, -5, -5, -4, -4, -3, -3, -2, -1, 0, 2, 3, 5, 7, 9, 10, 12, 13, 15, 16, 17, 19, 20, 22, 23, 24, 25, 26, 27, 27, 27, 26, 27, 26, 25, 25, 25, 24, 23, 23, 23, 23, 23, 22, 22, 21, 21, 22, 22, 23, 24, 24, 25, 25, 26, 27, 27, 27, 28, 29, 30, 31, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, 35, 38, 40, 42, 45, 45, 46, 46, 46, 45, 46, 45, 46, 46, 44, 46, 47, 47, 45, 47, 52, 50, 47, 44, 43, 43, 42, 41, 40, 38, 37, 35, 34, 34, 33, 33, 33, 34, 34, 33, 33, 32, 31, 30, 29, 29, 28, 27, 25, 24, 23, 22, 20, 19, 18, 17, 15, 14, 12, 11, 9, 7, 6, 4, 2, 1, -1, -3, -4, -6, -7, -9, -11, -12, -14, -15, -16, -18, -19, -21, -21, -22, -23, -24, -25, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -25, -25, -24, -24, -23, -22, -22, -21, -20, -19, -18, -18, -17, -18, -17, -16, -16, -16, -15, -14, -14, -14, -14, -14, -13, -13, -12, -12, -11, -11, -10, -10, -9, -8, -8, -7, -5, -5, -5, -2, 4, 4, 5, 6, 3, 1, 1, 1, 1, 1, 0, -0, -1, -2,
+ /* -45.0 */ 3, 3, 3, 3, 1, -0, -1, -3, -4, -5, -6, -7, -8, -8, -8, -9, -8, -8, -8, -8, -8, -8, -7, -8, -8, -8, -9, -10, -10, -11, -12, -12, -12, -13, -13, -13, -14, -14, -15, -15, -15, -15, -15, -16, -16, -15, -15, -15, -15, -14, -14, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -9, -9, -9, -9, -8, -8, -7, -7, -7, -6, -6, -5, -4, -4, -3, -3, -2, -2, -1, -0, 0, 1, 2, 3, 4, 5, 6, 6, 7, 9, 10, 11, 11, 13, 16, 19, 19, 18, 17, 16, 15, 14, 12, 12, 12, 11, 11, 11, 9, 5, 3, 2, 0, 0, -0, -1, -2, -3, -3, -3, -4, -4, -4, -3, -4, -4, -5, -5, -5, -4, -4, -3, -3, -2, -0, 1, 3, 5, 7, 9, 10, 12, 13, 15, 17, 18, 19, 21, 22, 23, 24, 25, 26, 26, 26, 26, 26, 26, 26, 25, 25, 25, 25, 24, 24, 23, 22, 21, 21, 21, 21, 22, 22, 22, 23, 24, 25, 26, 26, 26, 27, 27, 28, 28, 29, 30, 31, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33, 33, 34, 35, 38, 39, 42, 44, 46, 46, 47, 46, 46, 46, 46, 45, 45, 46, 46, 46, 45, 44, 45, 45, 44, 43, 43, 42, 41, 40, 39, 37, 36, 34, 33, 32, 32, 32, 31, 31, 31, 31, 31, 30, 30, 29, 28, 27, 26, 25, 24, 23, 21, 20, 19, 18, 16, 15, 14, 12, 11, 9, 8, 6, 4, 3, 1, -1, -3, -5, -6, -8, -9, -11, -13, -14, -16, -17, -19, -20, -21, -22, -23, -24, -25, -26, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -26, -26, -26, -25, -24, -24, -23, -22, -21, -20, -19, -19, -18, -17, -17, -17, -16, -16, -15, -15, -14, -13, -13, -12, -12, -12, -11, -11, -10, -9, -9, -8, -8, -8, -7, -6, -4, -3, -3, -3, -6, -1, 4, 5, 8, 7, 6, 5, 5, 6, 5, 5, 5, 4, 3,
+ /* -44.0 */ 10, 10, 9, 10, 9, 6, 3, 1, -0, -2, -4, -4, -5, -5, -6, -6, -6, -5, -6, -4, -6, -7, -7, -7, -7, -7, -8, -9, -9, -10, -10, -11, -11, -12, -12, -12, -13, -14, -14, -14, -15, -15, -15, -15, -14, -15, -14, -14, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10, -9, -9, -9, -9, -8, -8, -7, -7, -6, -6, -5, -5, -4, -4, -4, -3, -2, -2, -1, -0, 1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 10, 12, 14, 17, 18, 18, 19, 18, 16, 15, 14, 12, 11, 11, 11, 11, 10, 6, 6, 2, 1, 1, -0, -1, -2, -2, -2, -3, -3, -3, -3, -4, -5, -5, -6, -6, -6, -6, -5, -4, -3, -2, -0, 1, 3, 5, 7, 8, 10, 12, 13, 15, 16, 18, 19, 21, 22, 23, 24, 25, 26, 25, 26, 26, 26, 25, 25, 25, 24, 24, 23, 23, 22, 22, 23, 22, 21, 21, 21, 21, 21, 22, 23, 24, 24, 25, 26, 27, 27, 28, 28, 28, 29, 30, 30, 31, 32, 32, 33, 33, 33, 34, 34, 33, 33, 33, 34, 34, 35, 38, 40, 42, 44, 45, 46, 46, 46, 46, 44, 44, 44, 45, 44, 44, 44, 44, 44, 43, 43, 43, 42, 41, 39, 39, 37, 36, 34, 33, 32, 32, 31, 31, 30, 30, 30, 30, 29, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 16, 15, 13, 12, 11, 9, 8, 6, 4, 3, 1, -1, -3, -5, -6, -8, -10, -12, -13, -14, -16, -18, -19, -21, -22, -23, -24, -25, -26, -27, -28, -28, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -27, -27, -27, -26, -26, -25, -24, -23, -23, -22, -21, -20, -19, -18, -17, -17, -16, -16, -15, -15, -13, -10, -8, -9, -11, -9, -9, -9, -9, -8, -7, -7, -6, -6, -6, -5, -4, -3, -1, -1, 0, 1, -0, 2, 5, 8, 9, 9, 11, 10, 11, 12, 11, 11, 10, 10,
+ /* -43.0 */ 14, 13, 12, 12, 10, 9, 7, 4, 3, 2, 0, -1, -2, -2, -3, -3, -3, -3, -3, -4, -4, -4, -5, -5, -6, -6, -7, -7, -8, -9, -9, -10, -11, -11, -12, -12, -13, -13, -13, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -11, -10, -10, -10, -10, -10, -9, -9, -9, -9, -8, -8, -8, -8, -7, -6, -5, -5, -5, -4, -4, -3, -2, -2, -1, -0, 1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 10, 12, 15, 17, 20, 20, 20, 20, 19, 16, 14, 13, 13, 12, 11, 12, 11, 9, 6, 4, 1, 1, 0, -1, -2, -2, -2, -3, -3, -3, -4, -4, -5, -6, -7, -7, -7, -6, -6, -5, -3, -2, -1, 1, 3, 5, 7, 8, 10, 11, 13, 14, 16, 18, 19, 20, 22, 23, 24, 25, 25, 25, 25, 25, 25, 24, 24, 24, 23, 23, 23, 22, 21, 22, 21, 19, 19, 20, 21, 21, 21, 22, 23, 24, 25, 25, 26, 28, 28, 28, 28, 28, 29, 29, 30, 30, 31, 32, 33, 33, 33, 34, 34, 33, 34, 34, 33, 33, 34, 35, 37, 40, 41, 43, 43, 44, 45, 45, 44, 43, 44, 44, 43, 43, 44, 44, 43, 43, 42, 42, 41, 39, 38, 37, 36, 35, 33, 32, 32, 31, 30, 30, 30, 29, 29, 28, 27, 27, 26, 25, 24, 24, 23, 22, 21, 20, 19, 18, 16, 15, 13, 12, 11, 9, 8, 6, 4, 3, 1, -1, -3, -5, -7, -8, -11, -12, -14, -16, -17, -18, -20, -21, -23, -24, -25, -26, -27, -28, -29, -29, -30, -30, -30, -30, -30, -30, -30, -30, -30, -29, -29, -28, -28, -27, -27, -26, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -16, -15, -15, -14, -9, -5, -4, -5, -8, -9, -8, -8, -7, -6, -5, -5, -4, -4, -3, -3, -2, -0, 1, 2, 3, 4, 5, 7, 8, 9, 11, 13, 12, 10, 12, 14, 14, 15, 14, 14,
+ /* -42.0 */ 15, 15, 14, 13, 11, 10, 9, 7, 5, 4, 3, 2, 1, 0, 0, -1, 0, -0, -2, -2, -2, -3, -4, -4, -4, -5, -5, -6, -7, -7, -8, -9, -10, -11, -11, -12, -12, -12, -12, -13, -13, -13, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10, -9, -9, -9, -9, -8, -8, -8, -7, -7, -6, -5, -5, -4, -4, -3, -2, -2, -1, -0, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11, 12, 16, 17, 20, 21, 22, 23, 23, 19, 16, 14, 13, 13, 12, 12, 12, 12, 10, 6, 2, 1, 0, -1, -1, -2, -3, -3, -3, -4, -4, -5, -6, -7, -8, -8, -7, -6, -5, -4, -3, -2, -1, 1, 3, 5, 6, 8, 10, 11, 13, 14, 16, 18, 19, 20, 22, 23, 24, 25, 25, 25, 25, 25, 24, 24, 24, 24, 23, 23, 22, 22, 21, 20, 20, 20, 24, 21, 22, 20, 20, 21, 22, 23, 24, 25, 26, 26, 27, 28, 28, 29, 29, 29, 29, 30, 30, 31, 31, 32, 34, 35, 35, 35, 34, 34, 33, 33, 33, 34, 35, 37, 38, 40, 41, 42, 43, 44, 44, 43, 44, 44, 43, 43, 43, 43, 42, 42, 40, 40, 39, 37, 36, 35, 35, 33, 32, 31, 30, 30, 29, 28, 28, 28, 28, 27, 26, 25, 24, 23, 22, 22, 21, 20, 19, 18, 17, 16, 15, 13, 12, 10, 9, 7, 6, 4, 2, 1, -1, -3, -5, -7, -9, -11, -13, -14, -16, -18, -19, -21, -22, -24, -25, -26, -27, -28, -29, -30, -31, -31, -31, -32, -32, -31, -31, -31, -31, -31, -31, -30, -30, -29, -29, -28, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -15, -14, -12, -6, -2, -1, -2, -5, -7, -7, -6, -5, -4, -3, -2, -2, -1, -1, -0, 1, 2, 3, 4, 6, 7, 9, 11, 12, 13, 14, 15, 15, 11, 9, 10, 11, 14, 16, 15,
+ /* -41.0 */ 19, 18, 17, 15, 13, 12, 10, 7, 6, 5, 4, 4, 3, 2, 2, 4, 2, 0, 0, -1, -1, -1, -1, -1, -2, -3, -4, -4, -5, -6, -7, -8, -10, -10, -11, -11, -11, -11, -12, -12, -12, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -12, -12, -12, -12, -12, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10, -9, -9, -8, -8, -8, -8, -7, -7, -5, -4, -4, -3, -3, -2, -2, -1, -1, -0, -0, 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 11, 11, 16, 19, 21, 22, 23, 24, 23, 20, 16, 14, 14, 13, 13, 13, 13, 12, 11, 9, 5, 2, 1, -0, -1, -2, -3, -3, -4, -5, -5, -6, -7, -8, -8, -8, -7, -6, -5, -4, -3, -2, -1, 0, 2, 4, 6, 8, 10, 11, 13, 14, 16, 18, 19, 20, 21, 22, 23, 24, 25, 24, 24, 24, 24, 24, 23, 23, 23, 22, 22, 20, 20, 20, 19, 18, 17, 18, 18, 19, 19, 20, 21, 22, 23, 25, 26, 27, 27, 27, 29, 29, 29, 29, 29, 29, 30, 30, 30, 31, 33, 35, 36, 35, 35, 33, 33, 33, 33, 33, 33, 35, 36, 37, 38, 39, 40, 42, 43, 43, 43, 44, 43, 43, 42, 42, 41, 41, 40, 39, 37, 36, 35, 34, 32, 31, 30, 29, 29, 28, 28, 27, 27, 27, 26, 26, 25, 24, 22, 21, 20, 19, 19, 18, 18, 16, 15, 14, 13, 11, 10, 8, 7, 5, 4, 2, 0, -2, -4, -5, -7, -9, -11, -13, -15, -17, -19, -20, -22, -23, -24, -26, -27, -28, -29, -30, -31, -32, -32, -33, -33, -33, -33, -33, -33, -33, -32, -32, -32, -32, -31, -30, -30, -29, -28, -28, -27, -26, -25, -23, -22, -21, -20, -18, -17, -16, -16, -15, -14, -12, -6, -2, -1, -1, -0, -3, -5, -4, -3, -2, -1, -1, 0, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13, 14, 15, 16, 16, 18, 16, 13, 13, 17, 16, 15, 17, 19,
+ /* -40.0 */ 21, 20, 19, 17, 15, 13, 11, 9, 8, 7, 6, 6, 5, 5, 6, 3, 3, 3, 2, 1, 1, 1, 0, -0, -1, -2, -2, -3, -4, -6, -7, -8, -9, -10, -10, -10, -10, -11, -11, -12, -12, -12, -12, -12, -13, -13, -13, -13, -13, -13, -13, -13, -12, -12, -12, -12, -12, -12, -13, -13, -13, -13, -13, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10, -9, -9, -8, -8, -8, -7, -7, -6, -6, -5, -4, -3, -3, -2, -2, -1, -1, -1, -0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9, 11, 11, 10, 13, 17, 22, 23, 23, 23, 21, 19, 16, 15, 14, 13, 13, 14, 14, 13, 13, 12, 10, 5, 2, 0, -0, -2, -3, -4, -4, -5, -6, -6, -7, -7, -8, -7, -7, -6, -5, -4, -3, -2, -1, 0, 2, 4, 6, 8, 10, 11, 13, 14, 16, 17, 19, 20, 21, 22, 23, 23, 24, 24, 24, 23, 23, 23, 23, 22, 22, 22, 22, 20, 19, 18, 18, 18, 17, 18, 18, 19, 19, 20, 20, 21, 22, 24, 25, 26, 26, 27, 26, 28, 28, 29, 29, 29, 29, 29, 30, 30, 32, 34, 35, 35, 34, 33, 33, 33, 34, 34, 33, 33, 34, 34, 35, 37, 38, 40, 41, 42, 43, 43, 43, 42, 42, 41, 40, 40, 39, 38, 36, 35, 33, 32, 31, 30, 29, 28, 27, 27, 27, 26, 26, 26, 25, 24, 23, 22, 21, 20, 18, 18, 17, 17, 16, 15, 13, 12, 10, 9, 7, 6, 4, 2, 1, -1, -2, -4, -6, -8, -10, -12, -14, -16, -18, -19, -21, -23, -24, -25, -27, -28, -29, -30, -31, -32, -33, -33, -34, -34, -34, -34, -34, -34, -34, -34, -34, -33, -33, -32, -32, -31, -30, -30, -29, -28, -27, -26, -25, -24, -23, -21, -20, -18, -17, -15, -15, -14, -12, -7, -2, -2, -1, -0, 1, 0, -2, -2, -1, 1, 1, 2, 3, 3, 4, 4, 5, 6, 7, 8, 10, 12, 12, 15, 18, 19, 19, 19, 20, 19, 15, 13, 16, 18, 19, 19, 21,
+ /* -39.0 */ 22, 22, 21, 19, 17, 16, 13, 12, 11, 10, 9, 8, 10, 8, 6, 6, 5, 4, 3, 3, 3, 2, 1, 1, 0, -1, -2, -3, -4, -6, -7, -8, -8, -9, -9, -9, -10, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -13, -13, -13, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10, -10, -9, -8, -8, -8, -7, -7, -6, -6, -5, -4, -3, -3, -2, -2, -2, -1, -1, -1, -0, 1, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 9, 13, 17, 20, 24, 23, 20, 18, 17, 16, 14, 14, 14, 14, 13, 12, 13, 13, 13, 11, 8, 3, 1, -0, -2, -3, -4, -4, -5, -5, -6, -7, -7, -7, -7, -7, -6, -6, -5, -4, -3, -1, 1, 2, 4, 6, 8, 10, 11, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 23, 23, 23, 23, 23, 22, 22, 22, 22, 20, 20, 19, 19, 18, 17, 17, 17, 17, 18, 19, 19, 20, 20, 21, 22, 23, 24, 25, 26, 26, 28, 27, 28, 27, 28, 29, 29, 29, 30, 30, 30, 32, 34, 33, 32, 33, 32, 32, 32, 32, 32, 32, 32, 32, 33, 34, 36, 37, 39, 40, 40, 41, 41, 43, 42, 41, 40, 40, 38, 37, 35, 33, 31, 30, 29, 28, 27, 26, 26, 26, 26, 25, 25, 25, 24, 23, 22, 20, 19, 18, 17, 16, 16, 15, 15, 13, 11, 9, 8, 6, 5, 3, 2, 0, -2, -3, -5, -7, -9, -11, -12, -14, -16, -18, -20, -22, -23, -25, -27, -28, -29, -30, -31, -32, -33, -33, -34, -34, -35, -35, -35, -35, -35, -35, -35, -35, -35, -34, -34, -33, -33, -32, -31, -30, -29, -29, -28, -27, -26, -24, -23, -22, -20, -18, -16, -15, -13, -10, -6, -3, -1, 1, 2, 2, 3, 1, -1, 0, 2, 3, 4, 5, 5, 6, 7, 7, 7, 8, 9, 11, 13, 16, 16, 18, 21, 22, 22, 22, 22, 24, 23, 25, 25, 20, 21, 20, 22,
+ /* -38.0 */ 21, 23, 23, 22, 20, 18, 16, 14, 13, 13, 11, 12, 12, 9, 8, 7, 6, 5, 4, 4, 4, 3, 2, 1, -0, -1, -2, -3, -4, -5, -6, -7, -7, -8, -8, -9, -10, -10, -11, -11, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -13, -13, -12, -12, -12, -11, -11, -10, -10, -10, -10, -10, -10, -9, -9, -9, -8, -8, -7, -7, -6, -5, -4, -4, -3, -3, -2, -2, -2, -2, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 9, 14, 20, 21, 24, 24, 21, 19, 18, 16, 16, 15, 16, 15, 14, 15, 15, 15, 13, 11, 9, 4, 2, 1, -1, -2, -3, -4, -5, -5, -6, -6, -7, -7, -7, -7, -7, -6, -5, -4, -3, -1, 1, 2, 4, 6, 8, 9, 11, 13, 14, 15, 16, 18, 19, 20, 20, 21, 22, 22, 22, 22, 22, 21, 21, 21, 21, 20, 20, 19, 19, 17, 16, 16, 16, 17, 17, 18, 19, 19, 20, 21, 22, 23, 23, 23, 24, 25, 26, 26, 27, 27, 27, 27, 27, 28, 29, 29, 29, 29, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 30, 30, 31, 32, 34, 35, 36, 37, 38, 39, 39, 41, 41, 41, 41, 39, 37, 36, 34, 32, 31, 29, 27, 26, 26, 25, 25, 25, 25, 24, 24, 23, 22, 21, 20, 19, 17, 16, 15, 14, 14, 13, 14, 12, 9, 7, 6, 4, 3, 1, -0, -2, -4, -6, -8, -10, -11, -13, -15, -17, -19, -21, -22, -24, -26, -27, -29, -30, -31, -32, -33, -34, -34, -34, -35, -35, -36, -36, -36, -37, -36, -37, -36, -36, -35, -35, -35, -34, -33, -33, -32, -31, -30, -29, -28, -27, -26, -24, -22, -21, -19, -17, -15, -12, -8, -4, -1, 2, 3, 4, 7, 7, 6, 7, 6, 2, 4, 5, 6, 7, 8, 9, 9, 9, 10, 11, 12, 13, 17, 18, 19, 21, 24, 25, 25, 24, 25, 26, 28, 30, 29, 26, 22, 21, 21,
+ /* -37.0 */ 20, 21, 23, 23, 22, 20, 18, 17, 15, 15, 14, 13, 12, 11, 10, 8, 7, 6, 6, 5, 4, 3, 2, 1, -0, -1, -2, -3, -4, -5, -6, -6, -7, -7, -8, -8, -9, -10, -10, -10, -10, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -12, -12, -12, -12, -12, -11, -11, -10, -10, -10, -10, -10, -10, -9, -9, -8, -8, -7, -7, -6, -6, -5, -4, -4, -3, -3, -3, -3, -2, -2, -2, -2, -1, 0, 1, 2, 3, 5, 6, 7, 8, 9, 11, 11, 9, 12, 21, 21, 25, 25, 23, 20, 18, 17, 17, 17, 17, 16, 17, 17, 16, 15, 14, 12, 10, 8, 4, 2, -0, -2, -3, -4, -5, -5, -6, -6, -7, -7, -7, -7, -7, -6, -5, -4, -2, -1, 1, 2, 4, 6, 7, 9, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 21, 21, 21, 21, 21, 20, 20, 19, 19, 19, 19, 18, 18, 18, 17, 16, 16, 17, 17, 18, 18, 19, 20, 21, 22, 23, 23, 24, 24, 25, 25, 26, 26, 26, 27, 27, 27, 29, 29, 29, 29, 28, 30, 30, 30, 29, 30, 29, 30, 30, 31, 31, 30, 29, 28, 29, 30, 31, 31, 32, 34, 36, 37, 37, 37, 38, 39, 39, 38, 36, 36, 33, 31, 30, 28, 26, 25, 25, 24, 24, 24, 24, 23, 23, 22, 21, 19, 18, 17, 16, 15, 14, 13, 12, 12, 11, 10, 8, 5, 4, 2, 0, -1, -3, -5, -7, -8, -10, -12, -14, -16, -17, -19, -21, -23, -25, -26, -28, -29, -31, -32, -33, -34, -35, -36, -37, -37, -38, -39, -39, -39, -39, -39, -38, -39, -39, -38, -38, -37, -36, -35, -35, -34, -33, -32, -30, -29, -28, -27, -26, -25, -23, -21, -18, -13, -9, -6, -4, -1, 2, 4, 5, 7, 9, 12, 14, 14, 12, 6, 7, 8, 9, 10, 12, 11, 12, 12, 13, 14, 16, 17, 19, 21, 22, 24, 25, 26, 27, 27, 28, 29, 32, 33, 33, 30, 23, 21, 20,
+ /* -36.0 */ 23, 17, 22, 24, 24, 23, 21, 19, 18, 16, 16, 14, 14, 12, 11, 9, 9, 7, 6, 5, 4, 3, 2, 1, -0, -1, -2, -3, -3, -4, -4, -5, -6, -7, -7, -8, -9, -9, -9, -10, -10, -10, -10, -11, -11, -12, -11, -11, -11, -11, -11, -12, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10, -9, -9, -8, -8, -8, -7, -7, -6, -6, -5, -5, -4, -4, -3, -3, -3, -3, -3, -2, -2, -1, -0, 1, 2, 3, 5, 6, 7, 8, 10, 11, 12, 11, 9, 19, 21, 25, 27, 26, 23, 20, 19, 18, 18, 18, 18, 17, 17, 17, 17, 15, 13, 11, 9, 7, 4, 1, -1, -3, -5, -5, -6, -6, -6, -7, -7, -7, -7, -7, -6, -5, -4, -3, -1, 1, 2, 4, 6, 7, 9, 10, 12, 13, 14, 16, 17, 18, 18, 19, 20, 20, 20, 20, 19, 19, 18, 18, 18, 18, 18, 17, 17, 17, 18, 17, 17, 17, 17, 18, 18, 19, 19, 20, 21, 22, 23, 24, 24, 25, 25, 26, 26, 26, 27, 27, 28, 29, 31, 31, 30, 28, 28, 28, 28, 28, 28, 28, 28, 28, 30, 30, 30, 29, 27, 27, 27, 27, 28, 28, 30, 32, 34, 35, 35, 34, 34, 34, 35, 34, 34, 33, 33, 31, 29, 27, 25, 24, 24, 24, 24, 24, 23, 23, 22, 20, 19, 18, 17, 15, 14, 13, 12, 11, 11, 10, 9, 8, 6, 4, 1, -0, -2, -3, -5, -7, -9, -11, -12, -14, -16, -18, -20, -22, -24, -25, -27, -28, -30, -31, -33, -33, -36, -37, -38, -39, -39, -40, -40, -40, -41, -41, -40, -39, -38, -38, -38, -38, -39, -38, -37, -36, -36, -35, -34, -33, -31, -30, -29, -28, -26, -24, -21, -18, -11, -7, -5, -3, -1, 1, 3, 5, 6, 8, 10, 12, 16, 19, 17, 10, 9, 10, 12, 13, 14, 14, 15, 15, 16, 18, 19, 20, 22, 24, 25, 25, 27, 28, 29, 29, 31, 33, 36, 37, 36, 34, 33, 28, 23,
+ /* -35.0 */ 28, 18, 20, 25, 26, 25, 23, 21, 20, 19, 17, 16, 14, 13, 12, 10, 9, 8, 6, 5, 5, 3, 2, 1, 0, -0, -1, -2, -3, -3, -4, -5, -6, -6, -7, -8, -8, -9, -9, -9, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10, -9, -9, -9, -8, -7, -7, -6, -6, -6, -6, -6, -5, -4, -4, -3, -3, -3, -3, -2, -2, -2, -1, -0, 1, 2, 4, 5, 6, 7, 8, 10, 11, 13, 13, 10, 12, 21, 25, 30, 26, 22, 21, 20, 20, 19, 18, 18, 17, 17, 17, 16, 15, 14, 13, 10, 9, 8, 3, -0, -3, -5, -6, -6, -6, -7, -7, -8, -7, -7, -7, -6, -5, -4, -3, -1, 0, 2, 5, 7, 6, 8, 9, 11, 12, 14, 15, 16, 16, 17, 18, 18, 18, 19, 19, 18, 18, 18, 17, 17, 17, 17, 17, 17, 18, 17, 17, 17, 18, 18, 18, 19, 20, 20, 20, 21, 21, 22, 23, 24, 25, 25, 26, 26, 26, 26, 28, 30, 31, 32, 31, 30, 29, 29, 26, 27, 28, 27, 26, 26, 27, 28, 30, 30, 29, 27, 25, 25, 25, 26, 26, 27, 30, 33, 33, 33, 32, 31, 31, 31, 31, 30, 31, 30, 30, 29, 26, 25, 23, 22, 22, 22, 22, 22, 21, 20, 19, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 4, 2, -1, -2, -4, -6, -7, -9, -11, -13, -15, -17, -18, -20, -22, -24, -26, -28, -29, -30, -32, -33, -34, -37, -38, -40, -40, -40, -40, -40, -39, -38, -39, -40, -38, -35, -33, -32, -32, -34, -35, -35, -34, -33, -33, -33, -33, -33, -32, -31, -28, -25, -22, -19, -15, -11, -7, -4, -2, -0, 1, 2, 4, 6, 8, 10, 12, 14, 17, 20, 20, 17, 11, 13, 14, 15, 16, 17, 17, 17, 19, 21, 22, 24, 25, 26, 26, 27, 28, 31, 32, 32, 34, 38, 39, 38, 38, 38, 38, 37, 28,
+ /* -34.0 */ 37, 24, 18, 25, 27, 27, 26, 23, 21, 20, 17, 16, 16, 14, 12, 11, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -0, -2, -2, -3, -3, -4, -4, -5, -6, -7, -8, -9, -9, -10, -10, -10, -11, -11, -11, -12, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -12, -12, -12, -12, -11, -12, -11, -11, -11, -11, -11, -10, -10, -10, -10, -9, -9, -9, -8, -8, -7, -7, -7, -6, -6, -6, -6, -5, -5, -4, -4, -3, -3, -2, -2, -2, -1, -1, 0, 1, 2, 3, 5, 7, 7, 10, 10, 11, 12, 14, 13, 8, 19, 25, 32, 24, 22, 22, 23, 22, 21, 19, 18, 17, 17, 17, 17, 16, 16, 15, 13, 10, 8, 6, 2, -1, -3, -5, -6, -6, -7, -7, -8, -7, -7, -7, -6, -5, -4, -3, -1, 1, 3, 3, 5, 6, 7, 9, 9, 11, 12, 13, 14, 15, 16, 16, 17, 18, 18, 18, 18, 17, 17, 16, 16, 16, 16, 16, 16, 17, 18, 17, 18, 19, 18, 20, 20, 20, 21, 21, 21, 22, 23, 23, 24, 25, 25, 26, 26, 26, 27, 29, 31, 32, 33, 33, 32, 31, 30, 28, 27, 29, 28, 26, 26, 26, 27, 29, 29, 29, 26, 23, 23, 23, 23, 24, 25, 28, 31, 33, 31, 30, 28, 28, 28, 27, 27, 27, 28, 29, 27, 25, 24, 22, 21, 20, 20, 20, 20, 19, 18, 17, 16, 15, 14, 12, 11, 10, 9, 8, 7, 6, 5, 3, 1, -1, -2, -4, -6, -8, -9, -11, -13, -15, -17, -19, -21, -22, -24, -26, -28, -30, -31, -32, -33, -35, -37, -38, -40, -41, -41, -40, -40, -40, -37, -36, -37, -38, -36, -33, -31, -28, -28, -30, -30, -30, -30, -29, -27, -26, -27, -28, -28, -27, -24, -22, -18, -14, -11, -8, -4, -2, 1, 3, 4, 4, 6, 8, 10, 12, 14, 17, 19, 22, 24, 22, 18, 15, 17, 18, 19, 19, 20, 20, 23, 24, 26, 27, 27, 27, 28, 30, 32, 32, 33, 36, 39, 39, 39, 39, 40, 40, 41, 41, 37,
+ /* -33.0 */ 43, 35, 18, 24, 28, 28, 27, 24, 23, 20, 19, 18, 16, 14, 12, 11, 10, 9, 8, 7, 6, 5, 3, 2, 1, 1, -0, -1, -2, -2, -3, -4, -4, -5, -6, -7, -8, -9, -9, -10, -10, -10, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10, -9, -9, -9, -8, -8, -8, -7, -7, -7, -6, -6, -6, -6, -5, -5, -4, -3, -3, -2, -2, -2, -1, -1, -0, 0, 1, 3, 4, 5, 6, 6, 8, 9, 11, 12, 14, 15, 10, 15, 26, 32, 23, 21, 23, 25, 25, 23, 20, 19, 18, 17, 18, 17, 17, 16, 15, 13, 11, 8, 7, 4, -0, -3, -4, -5, -6, -7, -8, -8, -8, -8, -7, -6, -5, -3, -2, -1, 1, 2, 3, 4, 6, 7, 7, 8, 9, 11, 12, 13, 14, 14, 15, 16, 16, 17, 17, 17, 17, 16, 16, 16, 16, 16, 16, 16, 17, 17, 19, 19, 19, 20, 20, 23, 21, 22, 22, 22, 23, 23, 24, 24, 25, 26, 27, 27, 27, 28, 31, 31, 33, 34, 34, 32, 31, 29, 28, 29, 29, 30, 29, 25, 25, 25, 26, 27, 29, 26, 22, 20, 21, 21, 22, 23, 26, 31, 30, 28, 26, 25, 25, 24, 24, 23, 23, 24, 25, 25, 24, 22, 21, 19, 19, 18, 18, 17, 17, 16, 15, 14, 13, 12, 11, 9, 8, 7, 6, 5, 4, 3, 1, -1, -3, -5, -7, -8, -10, -11, -12, -15, -17, -19, -21, -23, -25, -27, -28, -30, -32, -33, -34, -35, -37, -39, -39, -40, -41, -40, -40, -41, -40, -38, -38, -39, -38, -36, -33, -30, -27, -27, -28, -28, -28, -28, -27, -26, -23, -22, -21, -21, -21, -19, -17, -15, -14, -11, -7, -2, 1, 3, 7, 7, 8, 8, 9, 12, 14, 17, 19, 22, 25, 27, 26, 25, 20, 19, 21, 24, 22, 24, 24, 27, 28, 29, 30, 29, 30, 30, 34, 34, 35, 36, 37, 38, 40, 40, 40, 41, 42, 42, 43, 43,
+ /* -32.0 */ 44, 41, 23, 20, 28, 30, 29, 25, 24, 21, 20, 19, 17, 15, 13, 12, 11, 10, 8, 7, 6, 4, 3, 2, 1, 1, 0, -0, -2, -2, -3, -3, -4, -5, -6, -7, -8, -9, -9, -10, -10, -10, -10, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10, -9, -9, -9, -9, -8, -8, -8, -7, -7, -7, -6, -6, -6, -6, -5, -5, -4, -4, -3, -2, -2, -1, -1, -1, -0, 0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 12, 13, 15, 16, 12, 15, 29, 32, 26, 21, 24, 25, 27, 25, 22, 20, 18, 17, 17, 17, 16, 15, 14, 13, 11, 8, 6, 5, -1, -3, -4, -5, -6, -8, -8, -7, -8, -7, -7, -6, -5, -2, -1, 0, 1, 2, 3, 4, 6, 6, 7, 8, 9, 10, 11, 12, 13, 13, 14, 15, 15, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 16, 17, 18, 19, 19, 19, 20, 20, 23, 21, 23, 23, 23, 23, 24, 24, 25, 25, 27, 27, 28, 29, 31, 30, 32, 33, 35, 37, 36, 35, 34, 34, 33, 33, 31, 31, 27, 24, 23, 23, 24, 25, 24, 20, 18, 18, 19, 20, 21, 24, 26, 26, 25, 23, 23, 21, 21, 20, 20, 20, 20, 21, 22, 21, 21, 21, 19, 16, 16, 15, 15, 14, 14, 13, 12, 11, 10, 9, 8, 6, 5, 4, 3, 2, 0, -2, -4, -6, -7, -9, -11, -13, -14, -15, -16, -19, -21, -23, -25, -26, -28, -30, -29, -31, -32, -34, -35, -36, -37, -40, -40, -41, -40, -41, -41, -40, -39, -39, -39, -38, -36, -35, -31, -27, -27, -26, -25, -26, -26, -24, -24, -22, -20, -19, -20, -19, -18, -15, -12, -12, -9, -4, 0, 2, 4, 9, 10, 12, 13, 12, 13, 16, 20, 22, 24, 26, 28, 30, 29, 27, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 31, 32, 32, 36, 37, 37, 39, 40, 41, 42, 42, 42, 42, 43, 43, 44, 44,
+ /* -31.0 */ 46, 45, 33, 19, 28, 31, 29, 28, 26, 23, 21, 19, 17, 16, 14, 12, 11, 10, 8, 7, 6, 4, 3, 2, 1, 1, -0, -1, -1, -2, -2, -3, -3, -5, -6, -7, -8, -8, -9, -9, -9, -9, -10, -11, -11, -12, -12, -13, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10, -9, -9, -9, -9, -8, -8, -8, -8, -7, -7, -7, -6, -6, -6, -5, -5, -5, -4, -4, -3, -2, -2, -1, -0, -0, 0, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13, 14, 16, 13, 17, 31, 33, 27, 24, 25, 25, 27, 26, 22, 20, 18, 17, 17, 16, 15, 15, 14, 13, 11, 8, 6, 4, 1, -3, -5, -6, -8, -8, -8, -8, -9, -8, -7, -5, -4, -1, 1, 3, 3, 2, 3, 4, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 12, 13, 14, 14, 15, 16, 16, 15, 15, 15, 15, 15, 15, 16, 17, 18, 18, 19, 20, 21, 21, 22, 24, 23, 23, 23, 24, 24, 25, 26, 26, 27, 28, 29, 29, 31, 31, 32, 33, 35, 35, 35, 35, 35, 34, 35, 36, 36, 32, 30, 25, 22, 22, 22, 22, 22, 17, 16, 16, 16, 16, 18, 20, 22, 22, 22, 21, 19, 18, 17, 17, 17, 17, 18, 18, 18, 18, 19, 18, 18, 15, 14, 13, 13, 13, 12, 11, 10, 9, 8, 7, 6, 4, 3, 2, 1, -0, -2, -4, -6, -8, -10, -12, -13, -15, -17, -17, -18, -21, -23, -25, -27, -28, -28, -30, -32, -34, -34, -36, -37, -37, -39, -39, -39, -40, -40, -40, -40, -40, -40, -39, -38, -37, -36, -31, -30, -26, -25, -25, -24, -24, -23, -24, -21, -20, -20, -19, -20, -18, -16, -13, -9, -7, -6, -2, 1, 4, 7, 11, 10, 14, 16, 16, 17, 18, 22, 24, 25, 27, 30, 32, 33, 31, 25, 26, 29, 28, 29, 31, 32, 33, 33, 34, 34, 34, 35, 37, 39, 40, 41, 42, 43, 45, 43, 43, 43, 44, 44, 45, 46,
+ /* -30.0 */ 48, 46, 40, 26, 25, 31, 31, 30, 27, 25, 23, 21, 19, 16, 15, 14, 12, 10, 9, 7, 6, 4, 3, 2, 1, 1, -0, -1, -2, -2, -1, -2, -4, -5, -6, -6, -7, -7, -8, -8, -9, -9, -10, -11, -11, -12, -13, -13, -13, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -11, -10, -10, -10, -10, -10, -9, -9, -9, -8, -8, -8, -8, -7, -7, -7, -6, -6, -6, -5, -5, -4, -4, -4, -3, -3, -2, -2, -1, 0, 0, 1, 1, 1, 2, 2, 3, 4, 5, 5, 7, 8, 9, 10, 12, 13, 15, 16, 14, 15, 33, 37, 32, 27, 25, 24, 24, 26, 23, 21, 19, 18, 17, 15, 14, 13, 11, 10, 9, 6, 4, 3, 3, 1, -4, -6, -7, -8, -8, -9, -10, -9, -7, -6, -4, -1, -0, 0, 1, 1, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 9, 10, 11, 12, 13, 13, 14, 15, 15, 15, 15, 15, 15, 15, 16, 16, 17, 17, 18, 19, 20, 21, 23, 23, 25, 22, 23, 24, 24, 25, 26, 26, 26, 27, 28, 29, 32, 31, 32, 34, 35, 34, 33, 33, 33, 33, 32, 34, 33, 36, 35, 30, 28, 24, 21, 21, 20, 20, 16, 14, 13, 14, 14, 15, 15, 18, 19, 19, 18, 16, 15, 14, 14, 14, 15, 15, 15, 14, 14, 14, 15, 15, 14, 13, 12, 11, 10, 10, 9, 8, 7, 6, 5, 4, 3, 1, 0, -1, -3, -5, -7, -9, -11, -13, -15, -16, -18, -19, -20, -21, -23, -25, -27, -30, -31, -31, -32, -33, -35, -36, -37, -38, -38, -38, -39, -39, -39, -40, -39, -40, -40, -40, -39, -37, -36, -33, -29, -27, -24, -24, -22, -23, -22, -22, -21, -20, -18, -18, -17, -18, -17, -14, -10, -6, -4, -1, 0, 3, 6, 8, 12, 13, 15, 18, 19, 21, 22, 24, 26, 28, 28, 32, 34, 36, 35, 30, 29, 29, 30, 32, 33, 33, 35, 36, 36, 36, 36, 37, 39, 42, 43, 44, 45, 45, 46, 45, 45, 45, 45, 45, 46, 48,
+ /* -29.0 */ 48, 47, 46, 35, 23, 30, 31, 31, 28, 26, 23, 21, 19, 17, 15, 14, 12, 10, 9, 7, 6, 4, 3, 2, 1, 0, -0, -1, -2, -2, -2, -3, -4, -5, -5, -5, -6, -7, -7, -8, -8, -10, -11, -12, -12, -13, -13, -13, -14, -13, -13, -13, -13, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10, -9, -9, -9, -8, -8, -8, -7, -7, -7, -6, -6, -6, -6, -5, -5, -5, -4, -4, -3, -3, -3, -2, -2, -1, -0, 0, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14, 15, 17, 16, 14, 31, 38, 35, 31, 28, 26, 26, 24, 24, 22, 20, 19, 17, 16, 14, 11, 10, 9, 8, 7, 6, 4, 2, 1, -3, -6, -8, -9, -9, -9, -9, -9, -8, -8, -6, -4, -3, -1, 0, 1, 2, 2, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 12, 13, 14, 15, 14, 15, 15, 15, 15, 15, 16, 17, 18, 18, 19, 20, 21, 22, 24, 24, 23, 24, 24, 24, 25, 25, 26, 26, 27, 28, 30, 32, 31, 32, 32, 32, 31, 31, 32, 32, 31, 31, 31, 31, 34, 35, 29, 27, 25, 19, 18, 18, 18, 13, 12, 11, 11, 12, 12, 11, 13, 15, 15, 15, 15, 13, 11, 10, 10, 11, 11, 11, 10, 10, 10, 11, 11, 10, 11, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 0, -1, -2, -4, -6, -8, -10, -12, -14, -15, -17, -19, -20, -22, -23, -25, -27, -29, -31, -33, -33, -33, -34, -36, -37, -36, -37, -38, -39, -38, -38, -38, -39, -39, -39, -39, -40, -39, -38, -36, -34, -28, -26, -23, -23, -21, -21, -20, -20, -18, -17, -17, -16, -16, -16, -16, -15, -12, -9, -4, -1, 2, 4, 5, 8, 10, 12, 14, 16, 19, 20, 23, 25, 26, 28, 30, 31, 33, 35, 37, 37, 34, 31, 33, 32, 34, 35, 35, 37, 38, 39, 38, 38, 40, 41, 46, 45, 46, 47, 47, 47, 47, 46, 47, 47, 46, 46, 48,
+ /* -28.0 */ 48, 49, 48, 41, 25, 30, 35, 32, 30, 27, 24, 22, 19, 17, 15, 13, 12, 10, 9, 7, 6, 5, 4, 2, 1, 0, -0, -1, -1, -1, -2, -3, -4, -4, -5, -5, -4, -5, -6, -8, -9, -11, -11, -12, -13, -13, -13, -14, -14, -13, -13, -13, -12, -12, -11, -11, -11, -10, -10, -10, -9, -9, -9, -9, -8, -8, -7, -7, -7, -6, -6, -6, -6, -5, -5, -5, -4, -4, -4, -3, -3, -3, -2, -2, -1, -1, -0, 0, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 6, 7, 8, 9, 11, 12, 14, 15, 17, 17, 13, 26, 35, 38, 35, 29, 29, 27, 24, 24, 23, 21, 20, 18, 16, 14, 11, 9, 8, 8, 7, 6, 6, 2, 1, -2, -6, -8, -10, -10, -11, -11, -11, -10, -9, -7, -6, -4, -3, -2, -1, -0, -0, 1, 1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 12, 13, 14, 14, 14, 14, 15, 15, 15, 16, 17, 17, 18, 19, 20, 21, 22, 23, 25, 24, 24, 25, 25, 25, 25, 26, 26, 27, 28, 30, 32, 32, 32, 32, 32, 30, 31, 31, 33, 31, 30, 30, 30, 32, 32, 28, 26, 24, 19, 18, 17, 15, 12, 10, 8, 9, 10, 10, 9, 8, 12, 12, 12, 12, 11, 8, 7, 7, 7, 8, 8, 8, 7, 7, 7, 7, 8, 9, 8, 8, 7, 7, 6, 4, 3, 2, 1, -0, -2, -3, -5, -7, -9, -11, -13, -15, -17, -19, -20, -22, -23, -24, -26, -28, -30, -31, -34, -35, -35, -36, -37, -38, -38, -37, -38, -39, -39, -38, -38, -38, -39, -39, -39, -39, -39, -38, -37, -34, -29, -24, -21, -20, -20, -20, -19, -18, -16, -15, -14, -14, -14, -13, -12, -12, -12, -10, -9, -6, 0, 4, 5, 8, 9, 11, 13, 15, 18, 20, 22, 25, 27, 29, 30, 32, 33, 35, 38, 40, 40, 38, 35, 36, 35, 36, 36, 38, 39, 41, 41, 41, 40, 42, 44, 46, 47, 47, 48, 48, 49, 49, 48, 48, 47, 47, 47, 48,
+ /* -27.0 */ 48, 50, 49, 45, 29, 31, 34, 33, 31, 28, 25, 22, 19, 17, 15, 13, 12, 10, 9, 7, 7, 5, 4, 2, 2, 0, -0, -1, -1, -1, -2, -3, -4, -4, -4, -4, -5, -6, -7, -9, -10, -11, -12, -12, -13, -13, -13, -13, -13, -13, -13, -12, -12, -12, -11, -11, -10, -10, -9, -9, -9, -8, -8, -8, -7, -7, -6, -6, -6, -5, -5, -5, -5, -5, -4, -4, -3, -3, -3, -3, -2, -2, -2, -1, -1, -0, 0, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 16, 18, 19, 13, 23, 35, 41, 41, 37, 36, 26, 25, 24, 24, 22, 21, 19, 17, 15, 11, 8, 6, 5, 7, 6, 4, 1, 0, -3, -7, -8, -11, -10, -10, -11, -12, -9, -9, -8, -7, -5, -4, -3, -3, -2, -2, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 14, 14, 14, 15, 15, 15, 16, 17, 17, 18, 19, 20, 21, 22, 22, 24, 26, 25, 25, 25, 25, 25, 25, 25, 26, 28, 31, 32, 33, 33, 31, 32, 30, 29, 28, 29, 28, 29, 29, 29, 29, 29, 28, 24, 22, 18, 15, 14, 13, 11, 7, 6, 6, 7, 7, 7, 6, 9, 10, 9, 8, 6, 5, 4, 4, 4, 4, 5, 5, 5, 4, 4, 4, 4, 5, 6, 6, 6, 5, 3, 3, 1, 0, -1, -2, -4, -6, -8, -10, -12, -14, -16, -18, -19, -21, -23, -24, -26, -27, -27, -29, -32, -34, -36, -37, -38, -39, -39, -40, -40, -40, -40, -40, -39, -39, -38, -38, -38, -38, -38, -38, -38, -37, -34, -30, -26, -23, -20, -18, -18, -18, -17, -15, -14, -13, -12, -11, -10, -10, -8, -7, -5, -2, 0, 0, 1, 4, 7, 9, 12, 14, 16, 18, 20, 22, 24, 26, 29, 32, 34, 35, 36, 38, 41, 43, 43, 39, 37, 37, 37, 38, 41, 41, 42, 43, 44, 44, 43, 45, 46, 48, 49, 50, 50, 50, 50, 50, 50, 49, 48, 48, 47, 48,
+ /* -26.0 */ 49, 51, 50, 47, 34, 32, 34, 34, 31, 28, 25, 22, 20, 17, 15, 14, 12, 10, 9, 8, 7, 6, 4, 3, 2, 1, 0, -0, -1, -2, -2, -3, -4, -3, -5, -6, -7, -8, -9, -10, -11, -11, -12, -12, -13, -13, -13, -13, -13, -13, -13, -12, -11, -11, -11, -10, -10, -9, -9, -8, -8, -7, -7, -6, -6, -6, -6, -6, -5, -5, -5, -5, -5, -4, -4, -3, -3, -3, -2, -2, -2, -2, -1, -1, -0, -0, 0, 1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 6, 6, 8, 9, 9, 11, 13, 15, 16, 17, 18, 16, 20, 34, 41, 43, 41, 36, 29, 27, 25, 25, 23, 21, 19, 17, 14, 11, 7, 5, 4, 5, 5, 4, 2, -0, -2, -6, -10, -11, -11, -10, -11, -11, -11, -10, -9, -7, -6, -5, -5, -4, -4, -4, -3, -2, -1, -0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 14, 14, 14, 14, 15, 16, 16, 17, 18, 19, 19, 20, 21, 22, 23, 25, 27, 29, 24, 25, 25, 25, 25, 26, 28, 31, 32, 34, 34, 30, 28, 29, 28, 27, 27, 26, 26, 26, 26, 26, 27, 26, 20, 19, 16, 13, 12, 10, 10, 6, 5, 4, 5, 5, 4, 5, 8, 9, 7, 5, 3, 2, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 2, 3, 2, 2, 1, 1, 0, -1, -2, -4, -5, -7, -9, -11, -13, -15, -17, -19, -20, -22, -24, -25, -27, -29, -30, -29, -31, -34, -36, -38, -39, -40, -40, -41, -42, -42, -42, -41, -39, -40, -40, -39, -38, -37, -37, -37, -38, -37, -35, -31, -27, -24, -22, -19, -17, -17, -17, -14, -12, -11, -11, -10, -8, -7, -6, -2, 0, 3, 4, 1, 2, 4, 8, 10, 12, 14, 17, 19, 21, 23, 24, 26, 28, 31, 35, 38, 39, 40, 42, 45, 45, 45, 42, 40, 40, 40, 41, 41, 43, 45, 46, 47, 46, 46, 47, 49, 50, 51, 51, 51, 52, 52, 51, 51, 50, 49, 49, 49, 49,
+ /* -25.0 */ 50, 51, 51, 50, 39, 28, 34, 34, 31, 28, 25, 22, 19, 17, 15, 14, 12, 10, 10, 9, 8, 7, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -4, -5, -5, -7, -8, -9, -9, -10, -11, -11, -12, -12, -12, -13, -13, -13, -13, -12, -11, -11, -11, -11, -10, -10, -9, -9, -8, -8, -7, -7, -6, -6, -5, -5, -5, -5, -5, -5, -5, -4, -4, -4, -3, -3, -3, -3, -2, -2, -2, -1, -1, -1, -0, -0, 0, 1, 1, 1, 2, 2, 3, 3, 3, 4, 5, 5, 8, 8, 8, 10, 11, 12, 14, 17, 18, 19, 16, 18, 36, 38, 41, 43, 39, 29, 27, 26, 25, 23, 21, 19, 17, 13, 10, 6, 4, 3, 2, 3, 4, 2, -1, -2, -3, -6, -10, -12, -11, -12, -11, -11, -9, -9, -8, -7, -7, -6, -6, -6, -5, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 12, 12, 13, 13, 13, 14, 14, 14, 15, 16, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 28, 26, 24, 24, 24, 24, 25, 28, 30, 32, 33, 33, 29, 28, 28, 27, 26, 24, 24, 24, 22, 21, 21, 19, 21, 15, 15, 12, 11, 11, 8, 7, 6, 4, 3, 3, 3, 2, 5, 8, 9, 7, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, -0, -0, -1, -2, -3, -4, -5, -6, -8, -10, -12, -14, -16, -18, -20, -22, -24, -25, -27, -28, -30, -32, -33, -32, -33, -36, -38, -39, -41, -41, -42, -43, -43, -43, -43, -43, -42, -41, -40, -39, -38, -38, -37, -37, -35, -34, -34, -30, -25, -22, -21, -18, -16, -16, -15, -12, -9, -7, -6, -7, -6, -4, -3, -3, 0, 2, 3, 3, 5, 7, 10, 13, 16, 19, 21, 24, 26, 27, 28, 29, 32, 34, 38, 41, 44, 46, 46, 47, 47, 47, 43, 43, 41, 43, 44, 44, 48, 47, 48, 49, 48, 48, 49, 51, 53, 54, 53, 52, 53, 53, 52, 52, 51, 50, 49, 49, 50,
+ /* -24.0 */ 50, 52, 52, 51, 45, 24, 32, 33, 31, 28, 25, 22, 20, 17, 15, 14, 12, 11, 11, 10, 8, 7, 6, 4, 3, 2, 1, 0, -1, -2, -4, -4, -4, -5, -6, -8, -8, -9, -9, -10, -11, -11, -12, -12, -12, -13, -12, -12, -12, -12, -11, -11, -11, -10, -10, -10, -9, -9, -8, -7, -7, -6, -6, -5, -5, -5, -4, -4, -4, -4, -4, -4, -4, -4, -4, -3, -3, -3, -3, -2, -2, -2, -1, -1, -1, -0, 0, 0, 1, 1, 1, 2, 2, 3, 3, 4, 4, 6, 6, 8, 8, 9, 11, 12, 14, 16, 18, 19, 17, 17, 32, 34, 40, 43, 43, 31, 27, 24, 24, 23, 20, 18, 16, 13, 9, 5, 2, 1, -1, -0, -0, -1, -3, -2, -3, -4, -6, -8, -9, -10, -12, -11, -10, -9, -9, -8, -7, -7, -6, -6, -6, -6, -5, -5, -4, -3, -2, -1, 0, 2, 3, 4, 5, 7, 8, 9, 11, 12, 12, 13, 13, 13, 13, 14, 14, 15, 16, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 25, 23, 23, 23, 23, 25, 28, 29, 31, 33, 32, 29, 27, 26, 26, 24, 23, 22, 21, 19, 17, 19, 18, 15, 11, 12, 9, 8, 9, 6, 4, 4, 3, 2, 2, 1, -0, 5, 7, 8, 6, 2, -1, -2, -2, -1, -1, -1, -1, -0, -1, -2, -2, -2, -1, -1, -2, -2, -3, -3, -4, -5, -6, -8, -9, -11, -13, -15, -17, -19, -22, -23, -25, -27, -29, -30, -31, -33, -34, -35, -35, -36, -38, -41, -42, -43, -43, -43, -44, -44, -44, -45, -44, -43, -42, -41, -40, -39, -37, -37, -35, -32, -32, -33, -30, -25, -21, -19, -16, -13, -11, -10, -8, -5, -4, -4, -4, -3, -1, 0, 2, 3, 4, 3, 5, 7, 10, 13, 17, 22, 24, 26, 28, 31, 32, 32, 33, 35, 38, 42, 46, 47, 48, 49, 49, 49, 48, 45, 44, 46, 47, 46, 47, 48, 49, 51, 50, 50, 50, 51, 54, 55, 55, 54, 53, 53, 54, 54, 53, 52, 51, 50, 50, 50,
+ /* -23.0 */ 50, 52, 52, 52, 51, 29, 28, 31, 30, 28, 25, 23, 20, 18, 16, 14, 13, 12, 11, 10, 9, 8, 6, 5, 3, 3, 2, 1, -1, -1, -3, -4, -5, -7, -7, -8, -8, -9, -9, -10, -10, -11, -11, -11, -12, -11, -12, -12, -11, -11, -11, -11, -11, -10, -10, -10, -9, -8, -8, -7, -6, -6, -5, -5, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -2, -2, -2, -2, -1, -1, -1, -0, 0, 0, 1, 1, 2, 2, 3, 4, 4, 6, 7, 7, 8, 9, 10, 12, 14, 16, 18, 20, 18, 15, 33, 36, 40, 44, 43, 37, 25, 24, 23, 21, 19, 18, 16, 13, 9, 5, -0, -2, -3, -4, -5, -5, -5, -4, -2, -3, -4, -6, -6, -6, -11, -11, -10, -9, -9, -8, -8, -7, -7, -6, -6, -6, -6, -6, -5, -4, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 10, 11, 12, 12, 13, 13, 13, 13, 14, 14, 15, 16, 17, 17, 18, 19, 20, 22, 23, 25, 26, 25, 24, 22, 22, 23, 24, 28, 29, 30, 32, 32, 30, 27, 25, 23, 22, 21, 19, 18, 17, 16, 15, 15, 14, 12, 10, 6, 6, 6, 3, 1, 0, 1, -0, -0, -1, -1, 3, 4, 6, 3, 1, -3, -4, -5, -4, -3, -3, -3, -3, -3, -4, -4, -4, -4, -4, -4, -4, -5, -6, -7, -8, -9, -11, -13, -14, -17, -18, -21, -23, -25, -27, -28, -30, -32, -33, -35, -36, -37, -38, -38, -38, -41, -43, -43, -44, -45, -45, -45, -45, -46, -46, -45, -44, -43, -41, -39, -37, -37, -36, -34, -32, -31, -32, -31, -27, -21, -16, -13, -10, -9, -7, -5, -5, -2, -0, 1, 2, 3, 4, 6, 8, 9, 11, 13, 15, 19, 22, 24, 26, 28, 30, 33, 36, 37, 37, 37, 39, 42, 46, 49, 50, 50, 51, 51, 51, 50, 50, 48, 48, 49, 48, 50, 51, 52, 52, 52, 52, 52, 53, 57, 58, 57, 52, 49, 50, 50, 52, 53, 54, 52, 51, 50, 50,
+ /* -22.0 */ 50, 52, 52, 53, 52, 44, 26, 30, 30, 28, 26, 23, 21, 18, 15, 14, 13, 12, 11, 11, 10, 9, 8, 5, 4, 4, 2, 1, -0, -1, -3, -4, -5, -6, -6, -7, -8, -9, -9, -9, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -9, -8, -7, -7, -6, -5, -5, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -2, -2, -2, -1, -1, -1, -0, 0, 1, 1, 2, 2, 3, 4, 6, 6, 7, 8, 9, 10, 11, 13, 16, 17, 19, 20, 15, 33, 37, 43, 44, 42, 39, 27, 23, 21, 21, 20, 18, 16, 14, 9, 4, -1, -3, -4, -6, -6, -7, -6, -5, -3, -3, -4, -5, -5, -6, -8, -10, -10, -10, -10, -9, -8, -7, -6, -6, -6, -6, -6, -6, -6, -5, -5, -3, -2, -1, 1, 2, 3, 4, 6, 8, 9, 10, 11, 12, 12, 13, 13, 13, 13, 14, 14, 15, 16, 17, 17, 18, 19, 21, 22, 23, 24, 25, 24, 23, 22, 23, 24, 27, 28, 29, 30, 31, 29, 27, 25, 21, 19, 19, 18, 16, 16, 14, 13, 11, 10, 10, 8, 4, 3, 2, -1, -2, -3, -2, -2, -3, -3, -2, 0, 0, 4, 3, -0, -5, -7, -7, -7, -6, -5, -4, -4, -6, -6, -5, -5, -6, -6, -6, -7, -7, -8, -9, -10, -12, -14, -16, -18, -20, -22, -24, -26, -28, -30, -32, -33, -35, -37, -38, -39, -39, -40, -40, -40, -44, -45, -45, -46, -46, -46, -46, -46, -47, -47, -47, -45, -44, -42, -40, -35, -34, -36, -33, -31, -31, -31, -29, -27, -22, -15, -12, -9, -7, -7, -6, -2, 0, 3, 5, 5, 5, 7, 10, 13, 14, 15, 16, 19, 21, 25, 27, 30, 31, 34, 37, 40, 41, 41, 42, 43, 46, 49, 51, 52, 54, 53, 53, 54, 53, 52, 51, 51, 52, 51, 54, 52, 54, 54, 54, 53, 53, 59, 60, 58, 54, 51, 60, 61, 60, 58, 57, 54, 53, 51, 50, 50,
+ /* -21.0 */ 50, 52, 52, 53, 53, 52, 35, 27, 30, 28, 26, 23, 20, 18, 16, 14, 14, 12, 12, 11, 11, 9, 7, 6, 5, 4, 2, 1, 0, -0, -2, -3, -4, -5, -6, -7, -8, -8, -9, -9, -10, -10, -10, -10, -11, -11, -11, -12, -12, -12, -12, -12, -11, -11, -10, -10, -9, -8, -7, -6, -6, -5, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -2, -2, -2, -1, -1, -1, 0, 0, 1, 1, 2, 3, 4, 6, 8, 8, 9, 10, 12, 14, 16, 18, 20, 20, 16, 32, 38, 43, 42, 43, 40, 29, 22, 23, 21, 21, 18, 16, 14, 9, 4, -1, -4, -6, -7, -7, -7, -7, -6, -5, -4, -4, -5, -6, -6, -8, -11, -9, -10, -8, -6, -5, -6, -5, -6, -6, -6, -7, -6, -6, -6, -5, -4, -3, -2, -0, 1, 3, 4, 6, 7, 8, 10, 12, 12, 12, 13, 13, 13, 13, 14, 14, 15, 16, 16, 17, 17, 18, 19, 20, 22, 22, 23, 23, 23, 22, 23, 25, 26, 25, 27, 29, 28, 29, 28, 24, 21, 18, 18, 16, 15, 14, 13, 12, 10, 8, 5, 4, 3, 0, -2, -4, -5, -5, -6, -7, -6, -6, -5, -4, -3, 0, 3, -1, -6, -9, -9, -9, -9, -8, -1, -2, -10, -9, -8, -7, -8, -8, -9, -9, -10, -11, -12, -13, -15, -17, -19, -22, -23, -26, -28, -30, -32, -34, -35, -37, -39, -40, -41, -42, -42, -43, -43, -43, -46, -46, -46, -47, -48, -47, -47, -47, -47, -48, -47, -46, -44, -42, -39, -37, -35, -35, -33, -31, -30, -28, -27, -24, -22, -18, -12, -9, -8, -6, -3, 1, 4, 6, 7, 8, 9, 11, 14, 16, 17, 20, 22, 24, 26, 28, 31, 32, 34, 36, 40, 44, 44, 43, 44, 47, 50, 53, 54, 55, 55, 56, 55, 56, 56, 53, 52, 54, 54, 54, 57, 54, 57, 57, 54, 54, 62, 60, 60, 57, 50, 62, 64, 64, 63, 62, 60, 59, 54, 53, 51, 50,
+ /* -20.0 */ 50, 51, 51, 51, 52, 52, 43, 24, 29, 29, 26, 23, 21, 18, 16, 15, 13, 12, 11, 10, 9, 9, 10, 7, 5, 4, 3, 2, 1, -0, -1, -2, -3, -4, -6, -6, -7, -8, -8, -9, -9, -10, -10, -10, -11, -11, -11, -12, -12, -12, -11, -11, -11, -10, -10, -9, -8, -8, -7, -6, -6, -5, -4, -4, -3, -3, -3, -2, -2, -2, -2, -3, -3, -3, -3, -3, -3, -4, -4, -4, -4, -4, -4, -4, -4, -3, -3, -3, -2, -2, -1, -1, -0, 0, 1, 1, 2, 3, 5, 7, 8, 9, 11, 13, 15, 16, 18, 20, 19, 16, 34, 42, 43, 43, 44, 42, 30, 23, 24, 22, 20, 18, 16, 14, 9, 4, -1, -5, -7, -8, -8, -8, -9, -8, -8, -7, -6, -10, -6, -6, -7, -10, -7, -9, -7, -8, -7, -6, -5, -6, -6, -6, -7, -7, -7, -6, -6, -5, -3, -2, -1, 1, 3, 4, 6, 7, 8, 10, 12, 12, 12, 12, 13, 13, 13, 13, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 20, 21, 21, 23, 23, 24, 25, 25, 25, 26, 26, 26, 25, 23, 22, 19, 16, 15, 14, 13, 11, 11, 10, 10, 7, 5, 1, 1, -1, -4, -4, -9, -11, -9, -10, -10, -9, -8, -7, -6, -2, 1, -1, -7, -11, -11, -11, -11, -11, -11, -12, -12, -7, -12, -10, -11, -11, -11, -12, -12, -13, -15, -16, -18, -21, -23, -25, -27, -29, -32, -33, -35, -37, -39, -40, -42, -44, -45, -46, -47, -46, -45, -45, -48, -48, -48, -48, -48, -49, -48, -48, -48, -48, -47, -46, -44, -42, -40, -37, -35, -34, -32, -30, -28, -26, -24, -22, -19, -17, -12, -7, -6, -3, 1, 4, 8, 9, 10, 11, 14, 16, 18, 21, 23, 24, 24, 25, 28, 31, 33, 34, 37, 39, 43, 46, 45, 45, 48, 52, 55, 56, 57, 57, 57, 57, 57, 58, 56, 54, 55, 55, 55, 56, 58, 57, 58, 56, 56, 60, 59, 61, 58, 51, 55, 64, 65, 65, 64, 63, 61, 59, 57, 52, 51, 50,
+ /* -19.0 */ 51, 50, 51, 51, 51, 50, 47, 26, 29, 29, 29, 25, 21, 18, 16, 14, 12, 12, 11, 10, 10, 9, 8, 6, 5, 4, 3, 2, 2, 2, 1, -0, -2, -3, -5, -6, -6, -7, -8, -8, -9, -9, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -10, -10, -9, -9, -8, -7, -7, -6, -5, -5, -4, -4, -3, -3, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -4, -4, -4, -4, -5, -5, -5, -5, -5, -4, -4, -3, -3, -3, -2, -2, -1, -1, -0, 1, 2, 3, 4, 6, 8, 10, 12, 13, 15, 17, 19, 21, 14, 20, 35, 44, 43, 44, 43, 39, 30, 22, 23, 22, 19, 17, 16, 12, 8, 4, -2, -5, -7, -8, -8, -11, -11, -9, -9, -10, -10, -11, -11, -9, -8, -7, -8, -11, -9, -8, -7, -6, -5, -5, -5, -6, -6, -7, -7, -7, -6, -5, -3, -2, -0, 1, 3, 5, 6, 7, 8, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 14, 15, 16, 16, 16, 16, 17, 17, 18, 19, 19, 19, 19, 20, 22, 24, 24, 26, 25, 23, 22, 22, 21, 20, 17, 14, 13, 12, 11, 10, 8, 6, 6, 6, 6, 2, -2, -5, -6, -7, -7, -11, -12, -13, -12, -11, -10, -10, -8, -3, -1, -2, -7, -13, -13, -14, -13, -13, -14, -15, -12, -10, -13, -13, -14, -15, -16, -15, -16, -17, -18, -20, -22, -25, -27, -29, -31, -34, -36, -37, -39, -41, -42, -44, -45, -47, -49, -49, -50, -51, -48, -47, -51, -51, -51, -50, -49, -50, -49, -49, -48, -47, -46, -45, -44, -42, -40, -37, -35, -33, -31, -29, -27, -24, -22, -20, -17, -15, -14, -7, -4, -0, 4, 8, 10, 11, 13, 16, 18, 20, 22, 24, 27, 29, 28, 29, 31, 34, 36, 37, 40, 42, 45, 47, 48, 49, 52, 56, 58, 59, 58, 58, 58, 58, 58, 59, 57, 57, 57, 58, 57, 56, 58, 58, 57, 57, 59, 59, 61, 60, 58, 53, 64, 66, 66, 65, 64, 63, 61, 59, 57, 55, 51, 51,
+ /* -18.0 */ 50, 51, 50, 49, 49, 48, 47, 33, 26, 29, 27, 25, 21, 18, 16, 14, 13, 13, 11, 10, 9, 8, 7, 7, 6, 4, 5, 3, 3, 3, 3, 3, -0, -3, -4, -4, -6, -7, -6, -7, -8, -9, -9, -10, -10, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -9, -8, -7, -7, -6, -6, -5, -4, -4, -3, -3, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -4, -4, -5, -5, -5, -5, -5, -5, -5, -5, -5, -4, -4, -4, -3, -3, -2, -2, -1, -0, 1, 2, 4, 5, 8, 10, 12, 14, 16, 17, 17, 13, 18, 27, 38, 44, 44, 45, 41, 38, 30, 22, 22, 22, 21, 16, 13, 10, 6, 2, -1, -3, -6, -8, -9, -13, -13, -11, -12, -12, -11, -11, -10, -10, -9, -8, -6, -11, -7, -9, -8, -7, -6, -6, -6, -6, -7, -7, -7, -7, -6, -5, -3, -1, -0, 2, 3, 5, 6, 7, 8, 10, 10, 11, 12, 12, 13, 13, 13, 13, 13, 14, 15, 15, 16, 16, 16, 16, 16, 16, 17, 18, 17, 17, 18, 20, 22, 25, 26, 24, 21, 20, 19, 18, 17, 14, 12, 11, 10, 9, 8, 4, 3, 2, 3, 4, 2, -4, -8, -10, -10, -9, -11, -13, -14, -15, -14, -14, -11, -10, -7, -5, -5, -7, -13, -15, -16, -16, -16, -16, -16, -17, -17, -16, -16, -16, -17, -18, -19, -20, -21, -22, -24, -26, -29, -31, -33, -36, -38, -40, -41, -42, -44, -45, -47, -49, -50, -52, -53, -52, -54, -52, -48, -53, -53, -52, -52, -51, -50, -51, -49, -48, -47, -45, -44, -43, -41, -39, -36, -34, -32, -30, -27, -25, -22, -19, -17, -14, -12, -10, -7, -5, 0, 6, 8, 12, 14, 17, 20, 22, 24, 27, 28, 29, 32, 32, 33, 35, 37, 39, 41, 44, 45, 48, 50, 50, 51, 54, 57, 60, 60, 59, 58, 59, 60, 60, 60, 59, 59, 60, 60, 59, 57, 59, 58, 58, 59, 61, 60, 60, 60, 57, 58, 65, 67, 66, 65, 64, 63, 61, 59, 57, 56, 53, 50,
+ /* -17.0 */ 51, 50, 49, 48, 47, 46, 45, 36, 24, 28, 27, 24, 20, 17, 16, 14, 12, 12, 11, 10, 9, 8, 7, 7, 6, 6, 5, 4, 5, 5, 3, 1, -1, -3, -2, -3, -3, -4, -6, -7, -7, -8, -9, -10, -11, -11, -11, -11, -11, -11, -10, -10, -10, -9, -9, -8, -8, -7, -7, -6, -6, -5, -4, -4, -3, -3, -3, -2, -2, -2, -2, -3, -3, -3, -3, -3, -4, -4, -5, -5, -6, -6, -6, -6, -6, -6, -6, -5, -5, -5, -4, -4, -3, -3, -2, -1, -0, 1, 3, 5, 7, 10, 13, 15, 16, 14, 12, 19, 30, 39, 45, 45, 44, 43, 36, 25, 21, 23, 22, 22, 19, 14, 10, 7, 4, 1, -1, -3, -4, -7, -9, -12, -12, -13, -15, -15, -12, -12, -11, -10, -9, -8, -12, -10, -10, -9, -8, -8, -7, -7, -6, -7, -7, -8, -8, -7, -6, -4, -2, -1, 0, 2, 4, 5, 6, 7, 9, 9, 10, 11, 11, 12, 12, 13, 13, 13, 13, 13, 14, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 17, 18, 21, 22, 23, 24, 22, 21, 19, 18, 17, 15, 13, 11, 10, 9, 7, 7, 7, -0, -1, 1, 1, -3, -9, -11, -11, -11, -12, -13, -13, -15, -18, -17, -16, -14, -12, -13, -11, -8, -9, -13, -17, -17, -18, -18, -17, -17, -19, -19, -17, -17, -20, -21, -22, -23, -24, -24, -26, -28, -30, -33, -35, -38, -40, -42, -44, -45, -46, -47, -49, -50, -52, -54, -55, -56, -57, -56, -54, -51, -55, -54, -54, -53, -52, -49, -51, -49, -48, -46, -44, -42, -42, -40, -37, -35, -33, -31, -28, -25, -22, -20, -17, -14, -10, -9, -6, -6, -4, -0, 7, 12, 16, 19, 22, 24, 26, 29, 31, 33, 31, 33, 35, 36, 38, 39, 43, 45, 45, 48, 50, 52, 52, 54, 57, 59, 61, 62, 59, 60, 61, 63, 63, 63, 61, 61, 61, 61, 60, 60, 60, 59, 58, 60, 59, 60, 60, 60, 58, 62, 66, 66, 66, 65, 63, 62, 61, 59, 58, 55, 54, 51,
+ /* -16.0 */ 52, 49, 48, 46, 45, 44, 42, 34, 22, 28, 26, 23, 20, 17, 16, 14, 12, 12, 11, 10, 9, 8, 7, 7, 7, 6, 6, 5, 5, 4, 2, 1, -1, 1, -0, -2, -4, -5, -5, -5, -6, -8, -9, -10, -10, -11, -11, -11, -10, -10, -10, -10, -9, -9, -9, -8, -8, -8, -7, -7, -6, -6, -5, -4, -4, -3, -3, -3, -3, -3, -3, -3, -3, -3, -4, -5, -5, -5, -5, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -5, -4, -4, -3, -3, -2, -1, 0, 2, 5, 7, 10, 13, 15, 13, 15, 30, 38, 42, 45, 45, 46, 41, 32, 25, 22, 22, 24, 22, 21, 17, 13, 9, 5, 2, -0, -2, -4, -5, -6, -8, -11, -13, -13, -14, -14, -13, -12, -11, -9, -9, -8, -9, -14, -11, -9, -8, -8, -8, -7, -7, -7, -7, -7, -7, -7, -6, -4, -3, -2, -0, 2, 3, 5, 6, 7, 8, 9, 10, 10, 11, 11, 12, 13, 14, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 16, 20, 23, 24, 24, 22, 20, 18, 17, 16, 14, 12, 10, 8, 7, 7, 5, 3, 2, -3, -5, -9, -8, -10, -12, -11, -10, -14, -15, -16, -15, -22, -20, -21, -19, -18, -18, -17, -13, -10, -14, -18, -19, -20, -20, -19, -20, -21, -22, -20, -19, -21, -25, -26, -27, -27, -28, -29, -32, -34, -37, -40, -42, -45, -46, -48, -50, -50, -51, -52, -54, -55, -57, -58, -59, -59, -58, -57, -54, -57, -56, -56, -54, -53, -52, -50, -49, -46, -45, -43, -40, -40, -37, -35, -33, -31, -28, -25, -22, -19, -18, -15, -11, -9, -8, -6, -3, -1, 2, 8, 14, 20, 22, 25, 27, 29, 33, 34, 35, 34, 35, 37, 39, 41, 43, 45, 47, 49, 50, 51, 52, 54, 56, 59, 62, 63, 62, 61, 63, 63, 64, 64, 63, 61, 61, 61, 62, 63, 62, 62, 61, 61, 60, 60, 59, 61, 60, 62, 64, 66, 66, 65, 64, 62, 61, 59, 58, 56, 54, 53, 52,
+ /* -15.0 */ 49, 48, 46, 45, 44, 42, 38, 27, 27, 29, 26, 23, 20, 17, 15, 14, 13, 12, 11, 10, 9, 8, 7, 7, 6, 6, 6, 5, 3, 2, 1, 1, 2, 0, -2, -3, -4, -5, -5, -6, -7, -8, -9, -10, -10, -10, -10, -10, -10, -10, -10, -9, -9, -9, -9, -9, -8, -8, -7, -7, -7, -6, -6, -5, -4, -4, -4, -3, -3, -3, -3, -3, -4, -4, -5, -5, -6, -6, -6, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -6, -6, -5, -5, -4, -4, -3, -2, -0, 2, 4, 7, 10, 12, 11, 15, 30, 38, 44, 46, 47, 47, 45, 33, 27, 27, 26, 25, 22, 20, 19, 16, 13, 8, 3, -0, -2, -4, -5, -6, -7, -9, -12, -14, -15, -14, -13, -13, -13, -11, -10, -11, -8, -13, -14, -12, -11, -9, -8, -8, -7, -7, -7, -7, -7, -7, -6, -5, -4, -3, -2, -0, 1, 3, 5, 6, 7, 9, 10, 10, 10, 11, 12, 12, 12, 13, 13, 13, 13, 14, 13, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 16, 18, 21, 22, 24, 22, 20, 18, 16, 15, 13, 11, 9, 7, 5, 4, 3, 2, -0, -3, -8, -9, -10, -11, -10, -12, -14, -16, -18, -19, -20, -23, -21, -23, -24, -26, -23, -20, -18, -14, -15, -19, -22, -22, -23, -22, -22, -23, -24, -27, -24, -24, -28, -29, -30, -31, -32, -33, -36, -38, -41, -43, -46, -49, -51, -52, -53, -54, -55, -56, -57, -58, -59, -60, -61, -61, -58, -56, -56, -59, -58, -57, -55, -54, -53, -49, -48, -44, -43, -41, -40, -37, -34, -32, -31, -28, -25, -22, -18, -15, -14, -12, -8, -5, -3, -1, 1, 4, 6, 10, 15, 21, 26, 28, 30, 32, 35, 37, 37, 37, 39, 41, 43, 45, 47, 48, 51, 53, 52, 52, 54, 56, 58, 61, 64, 65, 63, 63, 64, 64, 63, 62, 61, 62, 62, 63, 63, 63, 64, 63, 64, 62, 61, 62, 63, 59, 54, 62, 64, 65, 65, 64, 63, 61, 59, 58, 56, 55, 53, 51, 49,
+ /* -14.0 */ 47, 46, 44, 43, 38, 36, 32, 31, 33, 30, 29, 24, 19, 17, 16, 14, 13, 13, 12, 10, 9, 8, 7, 7, 6, 6, 5, 4, 3, 2, 3, 1, -1, -2, -3, -3, -4, -5, -6, -6, -7, -7, -8, -9, -9, -9, -10, -10, -10, -9, -10, -9, -9, -9, -9, -9, -9, -8, -8, -8, -7, -7, -6, -6, -5, -5, -4, -4, -4, -4, -4, -4, -4, -5, -5, -6, -6, -7, -8, -8, -8, -8, -8, -8, -8, -8, -8, -7, -7, -7, -6, -6, -5, -5, -4, -3, -2, -1, 1, 4, 6, 9, 9, 12, 24, 38, 37, 40, 45, 49, 44, 34, 31, 29, 29, 28, 25, 21, 19, 18, 15, 12, 10, 4, -2, -4, -6, -8, -9, -10, -10, -11, -15, -17, -14, -13, -13, -13, -14, -12, -10, -9, -12, -13, -12, -11, -10, -9, -8, -7, -7, -7, -7, -7, -7, -6, -5, -4, -3, -1, 0, 2, 4, 5, 6, 8, 9, 9, 10, 10, 11, 11, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 13, 13, 13, 13, 14, 15, 15, 16, 17, 19, 21, 22, 22, 21, 18, 16, 14, 12, 9, 6, 5, 4, 3, 1, -0, -2, -5, -7, -11, -11, -12, -11, -16, -17, -19, -20, -20, -22, -24, -23, -25, -26, -27, -25, -24, -18, -16, -16, -22, -24, -24, -25, -25, -25, -26, -27, -29, -29, -27, -31, -32, -34, -35, -36, -37, -40, -42, -45, -47, -50, -53, -55, -56, -58, -59, -60, -60, -61, -62, -62, -62, -64, -64, -63, -61, -60, -60, -59, -59, -56, -55, -53, -50, -46, -42, -41, -40, -38, -35, -30, -28, -27, -25, -21, -17, -14, -9, -10, -8, -4, -1, 1, 3, 6, 8, 10, 14, 19, 22, 27, 29, 32, 34, 36, 38, 39, 42, 42, 45, 48, 50, 51, 52, 54, 55, 55, 55, 57, 59, 62, 64, 66, 65, 64, 65, 64, 62, 62, 63, 63, 63, 64, 65, 66, 65, 64, 64, 65, 64, 64, 63, 62, 62, 52, 57, 65, 64, 64, 63, 61, 59, 58, 56, 54, 53, 51, 50, 47,
+ /* -13.0 */ 41, 44, 41, 36, 36, 34, 32, 29, 28, 25, 24, 21, 19, 17, 15, 14, 13, 14, 13, 12, 10, 9, 8, 7, 7, 6, 4, 4, 3, 2, 1, 0, -0, -1, -3, -3, -4, -4, -5, -5, -6, -6, -7, -8, -8, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -8, -8, -8, -8, -7, -7, -6, -6, -5, -5, -5, -5, -5, -5, -5, -5, -6, -7, -7, -8, -9, -9, -9, -9, -9, -9, -9, -9, -8, -8, -8, -7, -7, -6, -6, -5, -4, -4, -2, -1, 1, 4, 6, 6, 7, 17, 32, 36, 34, 36, 41, 37, 31, 30, 31, 31, 29, 27, 24, 21, 19, 17, 13, 12, 11, 5, -2, -5, -8, -8, -8, -11, -12, -12, -16, -18, -14, -13, -14, -16, -13, -12, -11, -11, -11, -12, -13, -12, -10, -9, -8, -8, -8, -8, -8, -7, -7, -6, -5, -4, -3, -1, 1, 2, 4, 5, 7, 9, 9, 9, 10, 10, 10, 11, 12, 12, 14, 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 14, 15, 16, 17, 18, 22, 21, 22, 22, 18, 15, 13, 11, 8, 5, 4, 2, 1, 0, -2, -5, -5, -6, -10, -14, -12, -15, -19, -17, -21, -22, -21, -22, -25, -27, -28, -27, -22, -27, -27, -21, -18, -21, -26, -26, -27, -28, -27, -28, -29, -30, -32, -34, -31, -34, -36, -37, -38, -39, -42, -44, -46, -49, -51, -54, -57, -59, -60, -62, -64, -64, -64, -64, -65, -65, -65, -66, -67, -65, -66, -63, -60, -61, -59, -57, -56, -53, -48, -43, -42, -40, -38, -37, -31, -26, -24, -22, -19, -17, -13, -10, -6, -4, -3, 1, 3, 5, 7, 11, 12, 15, 18, 23, 26, 29, 32, 35, 36, 37, 39, 42, 44, 46, 49, 52, 54, 55, 56, 57, 58, 58, 59, 60, 61, 64, 67, 65, 64, 66, 65, 65, 65, 64, 64, 64, 64, 65, 67, 68, 68, 66, 66, 64, 65, 64, 63, 62, 59, 48, 59, 62, 62, 62, 60, 59, 57, 56, 54, 52, 50, 48, 46, 41,
+ /* -12.0 */ 43, 41, 39, 35, 34, 31, 31, 27, 26, 25, 23, 20, 18, 17, 15, 15, 14, 14, 14, 13, 10, 9, 8, 7, 7, 6, 5, 4, 3, 3, 2, 1, 0, -0, -2, -2, -4, -4, -5, -5, -5, -5, -5, -6, -7, -8, -8, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -8, -8, -7, -7, -6, -6, -6, -6, -6, -6, -6, -6, -7, -8, -9, -9, -9, -10, -10, -10, -10, -10, -10, -10, -9, -9, -9, -8, -8, -7, -6, -5, -4, -3, -2, -1, 1, 3, 4, 2, 10, 24, 32, 33, 31, 31, 31, 28, 27, 29, 29, 30, 27, 23, 21, 19, 18, 15, 11, 9, 8, 2, -5, -8, -10, -9, -11, -14, -16, -14, -15, -17, -16, -16, -16, -16, -13, -12, -12, -12, -11, -12, -13, -12, -11, -9, -9, -9, -9, -9, -8, -8, -7, -6, -5, -4, -2, -0, 2, 3, 5, 6, 7, 9, 10, 10, 10, 10, 11, 11, 12, 12, 12, 13, 13, 12, 12, 11, 11, 11, 11, 11, 11, 12, 12, 13, 14, 15, 16, 17, 17, 19, 21, 22, 21, 19, 15, 12, 10, 7, 5, 3, 1, -0, -2, -3, -5, -7, -9, -10, -13, -13, -16, -19, -19, -23, -24, -24, -23, -26, -27, -26, -24, -27, -28, -29, -25, -24, -26, -29, -29, -30, -30, -30, -31, -32, -33, -35, -37, -34, -36, -39, -41, -42, -44, -46, -48, -51, -53, -55, -58, -61, -63, -64, -66, -68, -68, -68, -68, -68, -69, -68, -68, -69, -68, -67, -65, -62, -63, -59, -58, -56, -52, -48, -44, -39, -38, -36, -33, -28, -24, -21, -17, -14, -13, -9, -7, -3, 0, 3, 6, 7, 8, 10, 13, 15, 17, 21, 23, 25, 30, 35, 37, 38, 41, 43, 45, 46, 49, 52, 54, 56, 57, 59, 60, 61, 62, 62, 62, 63, 67, 69, 68, 67, 68, 67, 67, 65, 65, 66, 66, 66, 67, 65, 67, 68, 67, 63, 67, 64, 62, 61, 60, 56, 46, 58, 61, 60, 60, 58, 57, 53, 52, 50, 49, 46, 46, 42, 43,
+ /* -11.0 */ 39, 38, 34, 33, 31, 29, 28, 27, 26, 24, 22, 20, 19, 17, 17, 15, 15, 15, 15, 12, 11, 9, 8, 8, 7, 6, 6, 5, 5, 4, 3, 3, 2, 1, -0, -2, -2, -3, -3, -4, -4, -4, -4, -5, -6, -7, -7, -8, -8, -9, -9, -9, -9, -10, -10, -10, -10, -10, -10, -10, -10, -10, -9, -9, -9, -8, -8, -7, -7, -7, -7, -7, -7, -7, -8, -9, -9, -10, -10, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -9, -9, -8, -7, -6, -5, -4, -2, -1, 1, 2, -0, 2, 15, 27, 32, 31, 29, 28, 26, 27, 28, 28, 27, 27, 24, 21, 19, 18, 15, 11, 7, 2, -2, -4, -9, -10, -10, -11, -12, -16, -19, -17, -16, -16, -16, -17, -17, -16, -16, -13, -12, -13, -12, -10, -10, -12, -11, -11, -10, -10, -9, -9, -8, -8, -7, -6, -5, -3, -1, 1, 2, 4, 6, 7, 8, 10, 11, 12, 11, 11, 11, 11, 12, 13, 13, 13, 13, 12, 12, 12, 11, 11, 11, 10, 10, 11, 11, 12, 13, 14, 14, 15, 17, 18, 18, 20, 19, 16, 13, 10, 8, 6, 4, 1, -1, -1, -3, -4, -6, -9, -10, -11, -12, -14, -15, -17, -18, -22, -25, -24, -24, -27, -27, -29, -29, -30, -31, -30, -31, -30, -30, -31, -30, -31, -32, -32, -33, -34, -36, -37, -38, -36, -38, -42, -45, -47, -48, -50, -52, -55, -57, -58, -62, -65, -67, -69, -70, -71, -72, -72, -72, -72, -72, -72, -70, -70, -70, -68, -67, -63, -65, -60, -57, -55, -52, -48, -44, -39, -37, -33, -29, -26, -23, -19, -14, -8, -8, -7, -5, -2, -0, 3, 5, 5, 4, 7, 11, 13, 16, 18, 23, 27, 29, 30, 31, 37, 42, 46, 48, 49, 52, 55, 57, 59, 59, 60, 62, 63, 64, 66, 66, 67, 69, 72, 72, 70, 70, 69, 68, 69, 72, 75, 74, 74, 72, 70, 65, 69, 68, 65, 64, 58, 62, 56, 55, 52, 54, 58, 59, 57, 56, 52, 51, 49, 46, 45, 43, 41, 40, 39, 39,
+ /* -10.0 */ 35, 33, 31, 30, 29, 27, 27, 26, 25, 22, 21, 20, 18, 17, 16, 15, 16, 15, 14, 13, 11, 10, 8, 8, 7, 7, 7, 6, 6, 5, 5, 4, 2, 2, 0, -1, -1, -2, -2, -3, -3, 1, -2, -4, -5, -6, -7, -7, -8, -9, -9, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -9, -9, -8, -8, -8, -8, -8, -8, -9, -9, -10, -11, -11, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -10, -9, -8, -7, -6, -5, -4, -2, -1, 1, 0, -1, 9, 20, 24, 28, 27, 23, 26, 26, 27, 27, 26, 25, 23, 21, 18, 16, 14, 11, 7, 3, -1, -4, -4, -7, -10, -12, -12, -13, -15, -19, -19, -19, -19, -17, -16, -15, -17, -17, -14, -12, -12, -11, -9, -9, -12, -11, -11, -11, -10, -10, -9, -8, -7, -7, -6, -4, -3, -1, 2, 4, 5, 7, 8, 9, 10, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 11, 10, 10, 10, 10, 10, 10, 11, 11, 12, 13, 14, 15, 17, 17, 17, 16, 13, 11, 8, 6, 4, 2, -2, -4, -5, -5, -7, -6, -9, -13, -12, -11, -12, -17, -15, -19, -22, -23, -24, -27, -31, -30, -32, -32, -33, -33, -34, -33, -33, -32, -30, -32, -33, -33, -34, -35, -36, -38, -39, -38, -39, -42, -46, -49, -51, -52, -54, -56, -59, -61, -63, -65, -68, -71, -73, -74, -75, -76, -76, -76, -75, -75, -75, -74, -71, -70, -69, -68, -65, -65, -60, -58, -54, -52, -47, -43, -39, -35, -32, -27, -23, -21, -16, -11, -6, -5, -8, -7, -4, -2, 1, 5, 10, 10, 11, 14, 16, 19, 27, 36, 34, 27, 27, 33, 33, 36, 42, 47, 50, 52, 55, 58, 60, 61, 63, 65, 64, 66, 68, 69, 70, 72, 74, 74, 71, 69, 69, 75, 78, 78, 77, 74, 73, 73, 71, 70, 67, 66, 63, 63, 63, 58, 60, 60, 58, 58, 57, 56, 54, 51, 50, 47, 44, 43, 41, 39, 38, 36, 35, 35,
+ /* -9.0 */ 32, 29, 29, 27, 26, 25, 24, 24, 23, 22, 20, 19, 17, 17, 16, 15, 15, 15, 13, 12, 11, 9, 12, 9, 8, 8, 8, 7, 7, 7, 5, 5, 3, 2, 1, 0, 0, -0, -1, -0, 2, -2, -3, -3, -4, -6, -7, -8, -8, -9, -10, -10, -10, -11, -11, -11, -11, -12, -12, -12, -13, -13, -12, -12, -12, -11, -11, -10, -10, -9, -9, -9, -9, -9, -10, -10, -11, -12, -12, -12, -13, -13, -13, -13, -12, -12, -12, -12, -11, -11, -10, -9, -8, -7, -5, -4, -2, -0, 0, -2, 6, 14, 19, 19, 18, 19, 21, 25, 25, 26, 26, 24, 23, 20, 17, 14, 12, 11, 8, 4, 1, -3, -5, -8, -10, -13, -15, -16, -16, -17, -21, -22, -21, -21, -20, -19, -18, -16, -14, -14, -12, -11, -9, -8, -7, -8, -11, -11, -11, -10, -10, -9, -8, -7, -6, -5, -4, -2, -0, 2, 4, 6, 8, 9, 10, 12, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 12, 10, 10, 9, 9, 9, 9, 9, 10, 10, 11, 11, 13, 16, 16, 15, 13, 10, 8, 6, 4, 2, -0, -3, -6, -8, -10, -9, -8, -12, -14, -13, -11, -12, -14, -13, -19, -21, -24, -25, -31, -33, -33, -34, -35, -35, -37, -34, -38, -35, -34, -34, -34, -36, -35, -36, -37, -38, -40, -41, -40, -44, -46, -49, -52, -54, -56, -58, -60, -63, -64, -66, -69, -72, -75, -76, -78, -79, -80, -80, -79, -78, -77, -77, -76, -74, -72, -70, -68, -65, -65, -60, -58, -55, -50, -46, -42, -37, -32, -30, -25, -21, -17, -13, -10, -9, -9, -6, -3, 1, 7, 11, 16, 21, 24, 27, 31, 35, 33, 36, 40, 37, 35, 32, 37, 42, 42, 37, 34, 41, 46, 52, 56, 60, 62, 65, 67, 66, 67, 69, 70, 71, 73, 75, 74, 74, 71, 77, 82, 78, 78, 78, 77, 74, 73, 71, 70, 69, 67, 63, 62, 62, 54, 60, 59, 56, 56, 54, 52, 49, 48, 45, 43, 42, 41, 39, 38, 36, 35, 33, 32,
+ /* -8.0 */ 29, 27, 26, 25, 24, 22, 21, 21, 20, 20, 19, 18, 17, 17, 17, 16, 15, 15, 14, 12, 12, 10, 10, 10, 9, 9, 9, 9, 8, 8, 6, 5, 4, 3, 2, 2, 2, 1, 0, 3, 1, -1, -2, -3, -4, -5, -6, -8, -8, -9, -10, -10, -11, -12, -12, -12, -13, -13, -13, -14, -13, -13, -13, -13, -13, -13, -12, -12, -11, -11, -11, -10, -10, -10, -11, -11, -11, -12, -13, -13, -13, -13, -13, -13, -13, -13, -13, -12, -12, -11, -10, -9, -8, -7, -5, -4, -2, -0, -0, -2, 9, 15, 20, 13, 12, 15, 21, 23, 24, 26, 24, 22, 20, 18, 15, 11, 10, 8, 4, 1, -1, -4, -7, -10, -14, -16, -18, -19, -19, -20, -22, -23, -23, -23, -23, -23, -22, -19, -16, -13, -11, -10, -8, -6, -5, -5, -10, -11, -11, -11, -9, -8, -8, -7, -6, -5, -4, -2, 0, 2, 4, 6, 8, 10, 11, 12, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 13, 13, 10, 10, 9, 9, 8, 8, 8, 9, 9, 10, 11, 13, 13, 12, 10, 7, 6, 4, 1, -1, -3, -5, -7, -8, -12, -14, -11, -12, -11, -14, -14, -15, -17, -15, -17, -22, -25, -27, -29, -34, -35, -36, -37, -38, -40, -36, -40, -38, -36, -37, -36, -37, -38, -38, -39, -41, -42, -43, -44, -47, -50, -53, -55, -58, -60, -61, -63, -66, -69, -69, -72, -76, -79, -80, -82, -82, -83, -84, -83, -82, -81, -80, -79, -77, -75, -72, -70, -66, -65, -61, -58, -54, -50, -45, -42, -35, -30, -26, -23, -19, -15, -13, -12, -12, -7, 2, 12, 19, 24, 25, 27, 30, 33, 34, 33, 35, 37, 37, 38, 38, 41, 43, 45, 46, 48, 46, 42, 42, 46, 47, 51, 59, 63, 66, 67, 68, 69, 70, 71, 72, 74, 75, 75, 74, 75, 84, 75, 68, 72, 73, 69, 71, 69, 69, 68, 70, 65, 63, 61, 57, 59, 58, 56, 54, 51, 50, 49, 47, 44, 42, 41, 39, 39, 37, 36, 34, 33, 31, 29,
+ /* -7.0 */ 27, 25, 24, 22, 21, 21, 20, 19, 20, 19, 18, 17, 17, 17, 17, 16, 15, 14, 14, 13, 12, 12, 11, 11, 11, 10, 10, 9, 9, 8, 7, 6, 5, 4, 4, 3, 3, 3, 2, 0, -0, -0, -1, -2, -4, -5, -6, -7, -8, -9, -10, -10, -11, -12, -12, -13, -13, -14, -14, -14, -15, -15, -15, -14, -14, -14, -14, -13, -13, -12, -12, -12, -12, -11, -12, -12, -12, -13, -13, -13, -13, -13, -13, -13, -14, -13, -13, -13, -12, -12, -11, -10, -8, -7, -5, -3, -2, -0, -2, 3, 9, 17, 19, 11, 12, 16, 20, 22, 23, 24, 23, 22, 19, 16, 13, 9, 7, 4, 1, -2, -4, -6, -9, -12, -16, -18, -20, -21, -21, -21, -22, -23, -24, -24, -25, -24, -23, -21, -18, -14, -11, -10, -9, -6, -4, -4, -9, -10, -9, -9, -8, -7, -7, -6, -5, -4, -2, -1, 1, 3, 5, 8, 9, 10, 12, 13, 14, 15, 16, 16, 16, 16, 16, 15, 15, 15, 16, 16, 16, 16, 15, 13, 11, 10, 9, 9, 8, 8, 7, 7, 8, 11, 13, 11, 10, 9, 7, 5, 3, 1, -2, -5, -7, -9, -10, -11, -13, -16, -15, -11, -11, -13, -14, -16, -16, -19, -20, -22, -25, -27, -30, -34, -36, -37, -38, -39, -40, -43, -43, -39, -39, -38, -38, -39, -39, -40, -42, -43, -44, -45, -49, -51, -53, -56, -58, -61, -63, -65, -66, -69, -73, -73, -74, -78, -82, -84, -85, -86, -86, -87, -86, -84, -82, -81, -81, -78, -76, -73, -70, -65, -64, -61, -58, -52, -48, -44, -40, -34, -29, -23, -18, -17, -15, -12, -9, -6, 8, 20, 22, 22, 24, 25, 28, 31, 34, 37, 39, 41, 43, 44, 44, 49, 48, 48, 49, 50, 50, 50, 50, 50, 45, 42, 46, 54, 63, 67, 68, 70, 70, 70, 72, 73, 75, 76, 77, 77, 78, 73, 60, 59, 65, 67, 70, 68, 60, 63, 70, 67, 62, 59, 56, 59, 58, 55, 53, 52, 50, 48, 46, 44, 42, 40, 39, 37, 37, 35, 32, 31, 30, 29, 27,
+ /* -6.0 */ 26, 24, 22, 21, 20, 19, 19, 18, 19, 18, 17, 17, 17, 17, 17, 16, 16, 15, 15, 14, 13, 12, 12, 12, 12, 11, 11, 10, 10, 10, 9, 7, 7, 6, 5, 5, 4, 3, 3, 1, 1, 0, -1, -2, -4, -5, -6, -7, -8, -9, -10, -10, -11, -12, -13, -14, -14, -14, -15, -15, -15, -15, -16, -16, -15, -15, -15, -15, -14, -13, -13, -13, -13, -13, -13, -13, -13, -13, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -12, -12, -11, -9, -8, -6, -5, -3, -1, -0, -3, 8, 10, 17, 19, 14, 13, 15, 18, 20, 22, 23, 23, 21, 18, 14, 12, 8, 3, 1, -2, -5, -6, -9, -11, -14, -17, -19, -21, -21, -22, -22, -23, -24, -24, -26, -25, -24, -23, -22, -19, -15, -12, -11, -8, -7, -5, -5, -8, -8, -8, -8, -7, -6, -6, -5, -3, -2, -1, 1, 2, 4, 6, 8, 10, 12, 13, 14, 15, 16, 17, 18, 17, 17, 16, 16, 16, 16, 16, 17, 17, 17, 16, 15, 12, 11, 9, 9, 8, 7, 7, 7, 8, 9, 11, 7, 6, 5, 4, 1, -1, -4, -6, -8, -10, -13, -15, -15, -15, -16, -15, -13, -13, -13, -15, -18, -18, -20, -20, -19, -23, -28, -32, -34, -37, -39, -39, -40, -41, -42, -42, -42, -41, -40, -40, -39, -41, -42, -43, -44, -45, -49, -51, -54, -56, -59, -61, -64, -66, -68, -69, -72, -76, -77, -76, -80, -86, -87, -88, -89, -89, -90, -90, -89, -87, -86, -84, -81, -77, -75, -71, -66, -63, -61, -56, -51, -48, -44, -37, -31, -27, -21, -17, -17, -12, -10, -4, 8, 14, 19, 21, 24, 26, 28, 31, 34, 37, 40, 42, 44, 46, 47, 50, 49, 51, 52, 55, 55, 54, 54, 53, 53, 50, 35, 44, 53, 58, 66, 68, 70, 70, 70, 73, 75, 79, 81, 82, 81, 72, 71, 70, 75, 81, 75, 60, 57, 56, 71, 65, 63, 60, 60, 60, 58, 56, 54, 52, 49, 47, 45, 44, 42, 40, 39, 37, 36, 34, 33, 32, 31, 28, 27, 26,
+ /* -5.0 */ 24, 23, 21, 20, 20, 19, 18, 18, 18, 17, 17, 17, 17, 17, 17, 17, 16, 16, 15, 14, 14, 13, 13, 13, 13, 12, 12, 12, 11, 11, 10, 9, 8, 8, 7, 6, 5, 4, 3, 2, 1, -0, -1, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -12, -13, -14, -14, -15, -15, -16, -16, -17, -17, -17, -17, -16, -16, -16, -16, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -12, -11, -10, -9, -8, -6, -4, -2, -0, 1, -2, 11, 17, 18, 11, 10, 11, 15, 19, 21, 21, 22, 20, 19, 15, 13, 10, 6, 0, -3, -4, -6, -8, -11, -13, -16, -18, -20, -21, -22, -22, -22, -24, -25, -25, -26, -26, -25, -23, -22, -19, -15, -12, -10, -8, -7, -6, -7, -8, -8, -7, -6, -5, -5, -4, -3, -2, -1, 0, 2, 3, 5, 7, 9, 11, 12, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 17, 17, 17, 17, 17, 17, 17, 16, 14, 12, 10, 9, 8, 8, 7, 7, 6, 6, 4, 4, 3, 2, 0, -2, -6, -8, -10, -12, -14, -15, -16, -17, -16, -16, -15, -13, -15, -15, -16, -19, -20, -19, -19, -18, -23, -27, -30, -34, -38, -40, -41, -42, -42, -43, -43, -43, -43, -42, -42, -41, -43, -41, -41, -44, -49, -51, -54, -56, -59, -61, -64, -66, -69, -71, -72, -75, -78, -81, -81, -84, -88, -90, -91, -91, -92, -93, -93, -92, -88, -87, -86, -83, -79, -76, -72, -67, -64, -60, -56, -50, -46, -42, -35, -30, -24, -19, -19, -15, -9, -4, 8, 13, 16, 20, 23, 26, 28, 30, 33, 36, 40, 43, 45, 47, 47, 50, 54, 54, 57, 57, 56, 56, 58, 58, 58, 56, 55, 43, 49, 59, 57, 68, 68, 70, 69, 72, 76, 81, 84, 81, 77, 70, 68, 74, 78, 80, 82, 80, 74, 58, 60, 64, 66, 66, 63, 61, 59, 57, 54, 52, 50, 47, 45, 43, 42, 41, 39, 37, 35, 34, 33, 31, 29, 28, 27, 26, 24,
+ /* -4.0 */ 24, 22, 21, 20, 19, 19, 18, 18, 18, 18, 16, 17, 17, 16, 17, 17, 17, 16, 15, 14, 14, 14, 14, 14, 14, 14, 13, 12, 13, 12, 12, 11, 10, 9, 8, 7, 6, 4, 3, 2, 1, -0, -2, -3, -4, -5, -6, -7, -9, -9, -10, -11, -12, -13, -14, -15, -15, -16, -16, -17, -18, -18, -18, -18, -18, -18, -18, -17, -17, -16, -16, -16, -15, -15, -15, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -12, -11, -11, -9, -8, -7, -5, -3, -1, 1, 2, 0, 8, 16, 17, 13, 10, 12, 16, 20, 21, 21, 20, 18, 16, 13, 10, 8, 4, -2, -5, -6, -7, -8, -10, -12, -16, -20, -20, -20, -21, -22, -23, -24, -25, -25, -26, -27, -26, -23, -21, -19, -15, -13, -10, -8, -9, -8, -8, -7, -6, -6, -6, -4, -3, -3, -2, -1, 0, 1, 3, 5, 6, 7, 10, 11, 13, 14, 16, 17, 18, 19, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 17, 15, 14, 12, 11, 9, 8, 8, 5, 5, 5, 3, 3, 3, 1, -2, -6, -9, -10, -13, -14, -15, -17, -18, -18, -18, -16, -15, -12, -12, -15, -17, -19, -20, -19, -19, -18, -21, -24, -31, -33, -37, -40, -41, -43, -44, -44, -44, -44, -44, -44, -44, -44, -44, -42, -44, -49, -51, -54, -56, -59, -61, -64, -67, -69, -71, -73, -75, -77, -81, -84, -86, -87, -90, -92, -93, -94, -94, -95, -94, -94, -91, -87, -87, -85, -80, -76, -73, -66, -63, -60, -55, -49, -44, -39, -33, -28, -22, -19, -19, -10, -3, 7, 11, 14, 17, 21, 24, 27, 29, 32, 35, 39, 42, 44, 48, 50, 48, 51, 57, 57, 61, 59, 56, 58, 59, 59, 59, 59, 58, 57, 54, 65, 67, 70, 76, 81, 82, 81, 77, 79, 78, 77, 75, 75, 77, 79, 81, 81, 80, 78, 74, 66, 63, 63, 65, 64, 61, 59, 56, 54, 52, 50, 48, 45, 44, 43, 41, 40, 38, 35, 34, 32, 30, 29, 29, 27, 26, 25, 24,
+ /* -3.0 */ 23, 21, 20, 20, 19, 19, 18, 18, 18, 17, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 14, 14, 15, 15, 14, 14, 14, 14, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 1, -0, -1, -3, -4, -5, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16, -17, -17, -18, -18, -19, -19, -19, -20, -19, -19, -19, -18, -18, -18, -17, -17, -16, -16, -16, -16, -15, -15, -15, -15, -14, -14, -14, -14, -13, -13, -12, -12, -11, -10, -8, -7, -6, -4, -3, -0, 2, 4, 3, 5, 10, 22, 16, 10, 14, 18, 20, 20, 19, 18, 17, 14, 10, 8, 6, 2, -2, -4, -7, -9, -12, -15, -15, -15, -18, -18, -19, -20, -22, -22, -24, -25, -26, -26, -27, -27, -24, -22, -20, -16, -13, -11, -11, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 4, 5, 6, 8, 10, 11, 13, 15, 16, 18, 19, 20, 19, 19, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18, 17, 15, 14, 13, 11, 10, 8, 8, 7, 4, 4, 5, 4, 2, -2, -8, -11, -13, -15, -15, -18, -20, -19, -19, -18, -16, -14, -9, -9, -13, -16, -18, -19, -18, -18, -16, -20, -25, -30, -31, -38, -40, -41, -43, -45, -45, -46, -46, -45, -45, -45, -46, -46, -47, -49, -51, -53, -55, -58, -61, -64, -66, -69, -71, -73, -75, -77, -80, -84, -87, -89, -90, -92, -95, -96, -97, -97, -98, -98, -96, -93, -88, -89, -87, -82, -77, -73, -67, -63, -59, -54, -48, -43, -37, -31, -27, -21, -23, -15, -10, 4, 8, 12, 15, 18, 22, 25, 28, 31, 34, 38, 41, 43, 45, 50, 53, 54, 56, 61, 61, 61, 58, 58, 60, 60, 59, 58, 60, 60, 59, 63, 69, 69, 69, 69, 77, 78, 76, 77, 78, 77, 78, 78, 79, 79, 80, 79, 78, 77, 76, 71, 67, 62, 63, 63, 61, 59, 56, 54, 52, 50, 48, 45, 44, 42, 40, 39, 38, 37, 34, 33, 32, 30, 27, 26, 26, 25, 24, 23,
+ /* -2.0 */ 22, 21, 20, 19, 19, 19, 17, 17, 17, 16, 16, 16, 15, 15, 15, 15, 15, 15, 14, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 13, 12, 12, 11, 10, 9, 8, 6, 5, 4, 3, 1, -0, -2, -3, -4, -6, -7, -8, -9, -10, -11, -13, -14, -15, -16, -17, -18, -19, -19, -20, -20, -21, -21, -21, -21, -21, -20, -20, -19, -19, -18, -18, -17, -17, -17, -16, -16, -16, -15, -15, -14, -14, -13, -13, -13, -12, -11, -11, -10, -9, -8, -7, -5, -4, -2, 0, 3, 5, 6, 11, 18, 23, 23, 14, 16, 19, 20, 19, 17, 16, 15, 14, 10, 7, 5, 1, -2, -5, -7, -9, -12, -15, -16, -17, -19, -22, -22, -22, -23, -23, -24, -25, -25, -25, -26, -26, -22, -20, -19, -17, -16, -16, -13, -12, -11, -10, -8, -7, -6, -4, -4, -2, -1, 1, 2, 4, 5, 6, 8, 8, 10, 12, 13, 14, 15, 17, 18, 20, 20, 20, 20, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 17, 16, 15, 14, 12, 11, 10, 7, 5, 7, 7, 4, 2, -3, -7, -11, -15, -18, -20, -21, -21, -21, -20, -19, -17, -14, -7, -8, -12, -16, -18, -18, -17, -19, -15, -20, -25, -29, -31, -38, -41, -41, -44, -45, -47, -47, -47, -47, -46, -47, -48, -48, -49, -51, -53, -55, -57, -60, -63, -66, -69, -71, -72, -75, -77, -79, -83, -86, -89, -91, -92, -93, -97, -98, -99,-100,-101,-100, -98, -94, -92, -90, -87, -83, -78, -72, -68, -64, -59, -54, -47, -42, -36, -30, -26, -25, -17, -16, -3, 5, 8, 12, 15, 19, 22, 26, 29, 33, 36, 39, 42, 45, 48, 51, 53, 51, 57, 64, 64, 61, 61, 61, 62, 64, 62, 59, 64, 68, 69, 71, 71, 70, 72, 72, 74, 75, 74, 71, 71, 73, 76, 78, 78, 78, 78, 76, 74, 73, 70, 66, 63, 62, 62, 61, 60, 57, 54, 51, 49, 48, 46, 44, 42, 41, 40, 38, 37, 35, 33, 32, 30, 27, 28, 27, 25, 24, 23, 22,
+ /* -1.0 */ 21, 20, 20, 19, 19, 17, 17, 17, 16, 16, 16, 15, 14, 16, 15, 14, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 15, 14, 14, 13, 12, 12, 11, 10, 9, 8, 7, 5, 4, 2, 1, -0, -2, -3, -5, -6, -7, -9, -10, -11, -12, -13, -15, -16, -17, -18, -19, -20, -21, -21, -22, -22, -22, -23, -22, -22, -22, -21, -21, -20, -19, -19, -18, -18, -17, -17, -17, -16, -16, -15, -14, -14, -13, -13, -12, -11, -11, -10, -10, -6, -4, -4, -3, -2, -1, 1, 4, 7, 9, 10, 16, 24, 23, 15, 17, 19, 20, 19, 17, 15, 14, 12, 8, 5, 2, -1, -3, -6, -8, -9, -12, -15, -18, -20, -21, -24, -24, -23, -24, -23, -25, -25, -25, -25, -24, -22, -22, -23, -22, -20, -18, -16, -14, -12, -10, -8, -6, -4, -2, -1, 1, 4, 5, 6, 6, 7, 7, 8, 8, 9, 10, 13, 15, 17, 18, 18, 19, 19, 20, 20, 20, 20, 20, 19, 19, 18, 18, 18, 18, 18, 18, 17, 18, 17, 17, 16, 16, 14, 14, 12, 9, 8, 8, 6, 4, 0, -4, -8, -13, -15, -19, -21, -21, -21, -21, -20, -18, -16, -12, -7, -8, -12, -14, -17, -17, -15, -15, -16, -20, -24, -28, -31, -34, -40, -42, -43, -45, -48, -49, -48, -49, -48, -48, -49, -50, -51, -53, -54, -56, -59, -62, -64, -67, -70, -72, -74, -77, -78, -81, -85, -88, -91, -94, -93, -95, -99, -99,-100,-101,-102,-101,-100, -97, -95, -92, -88, -84, -79, -74, -67, -62, -59, -54, -47, -41, -35, -29, -27, -23, -17, -12, -0, 3, 8, 11, 15, 19, 22, 26, 30, 34, 37, 41, 45, 48, 50, 54, 54, 54, 55, 62, 61, 64, 61, 50, 44, 45, 55, 68, 71, 72, 74, 77, 79, 78, 75, 75, 72, 70, 69, 72, 73, 73, 73, 73, 73, 73, 72, 71, 69, 64, 62, 60, 60, 59, 60, 59, 58, 56, 53, 50, 48, 46, 44, 42, 41, 39, 39, 37, 35, 33, 32, 31, 28, 28, 28, 26, 24, 24, 22, 21,
+ /* 0.0 */ 21, 20, 20, 19, 19, 18, 17, 16, 15, 15, 15, 15, 15, 15, 14, 15, 16, 16, 16, 16, 16, 17, 16, 16, 17, 16, 15, 14, 14, 13, 13, 12, 11, 10, 9, 8, 6, 5, 3, 2, 1, -1, -2, -4, -6, -7, -8, -9, -11, -12, -13, -14, -16, -17, -18, -19, -20, -21, -22, -23, -23, -24, -24, -24, -24, -23, -23, -22, -22, -21, -20, -20, -19, -19, -18, -18, -17, -16, -16, -15, -14, -13, -13, -12, -11, -11, -10, -9, -8, -6, -4, -4, -3, -2, -0, 1, 3, 6, 10, 9, 14, 22, 25, 17, 18, 20, 21, 19, 19, 17, 14, 11, 7, 3, 0, -2, -5, -7, -8, -10, -13, -16, -19, -21, -23, -25, -26, -25, -24, -24, -26, -27, -26, -26, -25, -23, -25, -25, -23, -20, -19, -16, -14, -12, -10, -8, -7, -4, -2, 0, 2, 4, 6, 8, 9, 10, 10, 10, 11, 12, 13, 13, 15, 17, 18, 19, 19, 19, 19, 19, 19, 20, 19, 19, 19, 19, 18, 18, 17, 17, 17, 17, 17, 17, 17, 16, 17, 16, 14, 12, 9, 9, 8, 6, 3, -1, -4, -8, -11, -15, -17, -19, -20, -21, -21, -19, -17, -15, -12, -7, -10, -12, -12, -14, -16, -16, -14, -12, -19, -23, -27, -30, -33, -35, -41, -43, -45, -48, -49, -50, -49, -49, -49, -50, -51, -52, -53, -55, -58, -60, -63, -66, -68, -71, -73, -75, -78, -80, -83, -86, -89, -92, -95, -95, -96,-100,-101,-102,-103,-103,-103,-102, -99, -94, -93, -89, -84, -79, -74, -69, -63, -58, -53, -47, -40, -34, -30, -29, -19, -13, -7, -2, 2, 6, 10, 14, 18, 22, 26, 30, 34, 37, 41, 45, 50, 54, 55, 55, 53, 54, 58, 61, 63, 56, 55, 51, 47, 69, 72, 74, 77, 76, 73, 74, 73, 72, 68, 68, 70, 71, 72, 72, 72, 72, 71, 69, 68, 66, 66, 62, 63, 61, 59, 58, 59, 59, 59, 56, 54, 52, 49, 47, 45, 44, 42, 41, 39, 38, 36, 34, 32, 31, 29, 28, 28, 25, 25, 23, 23, 22, 21,
+ /* 1.0 */ 19, 20, 19, 19, 18, 17, 17, 16, 15, 15, 15, 14, 14, 14, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 16, 16, 15, 15, 14, 13, 12, 11, 11, 10, 8, 7, 6, 5, 3, 1, -0, -2, -4, -5, -7, -8, -9, -11, -12, -13, -15, -16, -17, -18, -19, -21, -22, -23, -24, -24, -25, -25, -25, -25, -25, -25, -24, -24, -23, -22, -21, -21, -20, -19, -19, -18, -17, -17, -16, -15, -14, -13, -13, -12, -11, -10, -9, -7, -6, -5, -4, -3, -2, -1, 1, 2, 3, 6, 8, 10, 12, 18, 28, 24, 19, 20, 22, 21, 20, 17, 14, 10, 6, 2, 1, -1, -6, -8, -9, -11, -14, -17, -20, -23, -25, -26, -28, -28, -27, -26, -27, -28, -27, -26, -26, -28, -27, -25, -22, -20, -18, -15, -13, -11, -8, -6, -4, -1, 1, 4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 13, 12, 12, 15, 16, 17, 17, 17, 18, 19, 19, 20, 20, 19, 19, 18, 18, 18, 18, 17, 17, 17, 16, 16, 16, 16, 15, 16, 14, 13, 11, 11, 9, 7, 4, -0, -3, -6, -10, -13, -15, -18, -19, -19, -19, -18, -16, -14, -13, -11, -12, -13, -14, -14, -16, -12, -16, -14, -19, -24, -26, -29, -31, -33, -36, -42, -44, -47, -50, -51, -49, -50, -50, -51, -52, -53, -54, -56, -58, -61, -64, -66, -68, -71, -73, -76, -78, -81, -84, -88, -91, -94, -96, -96, -97,-100,-102,-103,-103,-103,-103,-102,-100, -96, -95, -91, -86, -80, -74, -68, -61, -58, -52, -47, -40, -35, -32, -26, -19, -12, -7, -3, 1, 4, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 50, 55, 58, 58, 58, 56, 56, 64, 65, 63, 67, 68, 58, 65, 71, 72, 73, 74, 74, 74, 73, 71, 71, 71, 71, 71, 71, 71, 71, 70, 69, 68, 67, 66, 66, 62, 62, 59, 58, 57, 57, 57, 57, 55, 53, 50, 48, 46, 45, 43, 42, 40, 39, 37, 35, 33, 31, 31, 28, 29, 26, 26, 24, 23, 21, 20, 19,
+ /* 2.0 */ 19, 19, 19, 18, 18, 17, 16, 15, 15, 14, 14, 14, 14, 14, 14, 15, 15, 16, 15, 16, 17, 17, 18, 18, 16, 15, 14, 14, 14, 13, 12, 11, 10, 9, 7, 6, 5, 4, 2, 0, -1, -3, -4, -6, -8, -9, -11, -12, -13, -14, -16, -17, -18, -20, -21, -22, -23, -24, -25, -26, -26, -27, -27, -27, -26, -26, -25, -25, -24, -23, -23, -22, -21, -20, -19, -18, -18, -17, -16, -15, -14, -13, -12, -10, -10, -9, -7, -6, -5, -4, -3, -2, -1, 0, 1, 3, 5, 7, 9, 11, 11, 13, 20, 26, 24, 20, 20, 20, 18, 14, 11, 8, 4, -0, -1, -4, -6, -9, -10, -12, -16, -19, -22, -24, -26, -28, -29, -29, -29, -28, -29, -29, -28, -30, -32, -29, -27, -24, -22, -20, -17, -15, -13, -10, -8, -5, -2, 0, 3, 5, 7, 7, 8, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 14, 14, 15, 16, 18, 20, 20, 20, 19, 18, 18, 18, 19, 19, 18, 17, 17, 17, 17, 16, 16, 16, 15, 15, 16, 14, 13, 13, 12, 9, 7, 4, 0, -1, -3, -7, -10, -14, -16, -18, -16, -16, -15, -14, -13, -13, -11, -11, -13, -14, -14, -16, -15, -17, -16, -20, -23, -25, -28, -30, -30, -33, -36, -40, -46, -50, -51, -50, -50, -51, -52, -53, -54, -55, -56, -58, -61, -63, -66, -68, -71, -74, -76, -79, -81, -85, -89, -92, -95, -97, -97, -99,-100,-102,-104,-104,-104,-104,-103,-102, -99, -95, -90, -85, -80, -73, -66, -61, -56, -51, -47, -43, -39, -32, -27, -21, -10, -7, -4, -0, 4, 8, 12, 15, 20, 23, 26, 30, 34, 38, 41, 45, 53, 56, 58, 57, 54, 54, 59, 59, 60, 64, 70, 62, 56, 68, 69, 72, 74, 74, 74, 73, 72, 71, 70, 70, 70, 69, 70, 69, 68, 67, 66, 66, 65, 64, 62, 60, 57, 56, 56, 56, 56, 55, 54, 52, 50, 47, 46, 44, 42, 40, 39, 38, 36, 34, 32, 31, 30, 27, 28, 26, 25, 23, 21, 21, 20, 19,
+ /* 3.0 */ 19, 18, 18, 17, 17, 16, 16, 15, 14, 14, 14, 14, 14, 14, 14, 15, 15, 16, 16, 17, 17, 18, 17, 17, 16, 15, 14, 14, 12, 11, 10, 10, 9, 8, 7, 5, 4, 3, 1, -0, -2, -3, -5, -7, -9, -10, -11, -13, -14, -16, -17, -18, -20, -21, -22, -23, -25, -25, -26, -27, -28, -28, -28, -28, -28, -27, -26, -26, -25, -24, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -12, -11, -10, -9, -8, -7, -5, -4, -3, -2, -1, 0, 1, 2, 4, 5, 7, 10, 12, 13, 11, 15, 24, 27, 18, 18, 16, 12, 9, 6, 3, 1, -3, -6, -7, -6, -10, -13, -14, -17, -20, -23, -26, -28, -29, -30, -30, -30, -31, -31, -29, -29, -31, -31, -29, -27, -25, -23, -21, -18, -15, -12, -10, -7, -4, -2, 1, 4, 5, 6, 8, 8, 9, 10, 11, 11, 12, 13, 13, 15, 15, 15, 16, 17, 18, 18, 19, 20, 21, 20, 21, 20, 20, 20, 19, 18, 18, 18, 17, 17, 17, 16, 15, 14, 16, 17, 17, 16, 15, 15, 13, 11, 8, 6, 3, 1, -0, -3, -7, -10, -13, -14, -13, -12, -12, -11, -12, -12, -11, -11, -13, -14, -13, -13, -15, -17, -18, -20, -21, -24, -27, -29, -30, -31, -35, -37, -41, -47, -50, -50, -52, -51, -53, -53, -54, -56, -57, -59, -61, -63, -66, -68, -71, -73, -76, -79, -82, -86, -90, -93, -95, -98, -96, -99,-101,-103,-104,-103,-104,-104,-104,-102, -99, -95, -91, -85, -80, -74, -67, -60, -55, -51, -49, -44, -37, -31, -29, -19, -12, -9, -5, -1, 2, 5, 9, 13, 18, 21, 24, 28, 31, 35, 40, 45, 50, 54, 57, 55, 55, 57, 59, 62, 65, 68, 70, 67, 56, 62, 67, 73, 73, 74, 73, 72, 71, 70, 69, 69, 69, 68, 68, 68, 67, 66, 65, 64, 64, 63, 61, 57, 56, 54, 54, 55, 55, 54, 53, 50, 49, 47, 46, 43, 41, 40, 38, 36, 34, 32, 30, 30, 29, 26, 28, 25, 24, 22, 21, 20, 19, 19,
+ /* 4.0 */ 17, 17, 16, 16, 17, 16, 15, 14, 14, 14, 13, 13, 14, 13, 14, 14, 15, 16, 17, 16, 17, 17, 17, 16, 15, 15, 14, 13, 12, 11, 10, 9, 7, 6, 5, 4, 3, 2, 0, -1, -3, -4, -6, -8, -10, -12, -13, -15, -16, -17, -19, -20, -21, -22, -23, -25, -26, -27, -28, -28, -29, -29, -29, -29, -29, -29, -28, -27, -27, -26, -25, -24, -23, -21, -20, -19, -18, -17, -16, -14, -13, -12, -11, -10, -9, -8, -7, -5, -4, -3, -2, -0, 1, 3, 4, 5, 7, 9, 10, 13, 14, 13, 10, 17, 27, 18, 19, 10, 6, 4, 2, -1, -3, -6, -7, -8, -9, -12, -14, -15, -18, -22, -24, -27, -31, -33, -33, -32, -33, -34, -32, -29, -30, -31, -32, -30, -28, -26, -23, -21, -18, -15, -13, -10, -7, -4, -1, 2, 4, 5, 6, 8, 9, 10, 10, 12, 12, 13, 14, 15, 16, 16, 17, 17, 18, 19, 19, 20, 21, 22, 22, 24, 25, 24, 23, 22, 21, 20, 20, 19, 18, 17, 16, 15, 17, 19, 21, 19, 18, 20, 16, 15, 14, 12, 10, 8, 5, 3, -3, -6, -8, -9, -10, -11, -11, -11, -11, -11, -11, -11, -12, -13, -13, -12, -11, -14, -16, -17, -16, -18, -22, -26, -30, -30, -31, -34, -37, -39, -43, -47, -49, -53, -54, -52, -53, -54, -55, -57, -59, -61, -63, -65, -67, -70, -73, -77, -80, -83, -87, -90, -93, -96, -98, -96,-100,-101,-103,-104,-104,-106,-106,-105,-103, -99, -95, -90, -86, -80, -73, -67, -60, -55, -51, -51, -44, -43, -33, -22, -20, -15, -11, -7, -2, 1, 3, 6, 10, 15, 19, 22, 25, 29, 33, 37, 42, 47, 52, 56, 55, 57, 59, 61, 63, 66, 68, 69, 70, 62, 65, 66, 71, 72, 72, 72, 71, 70, 69, 68, 67, 67, 67, 67, 67, 66, 65, 64, 63, 62, 62, 59, 57, 55, 53, 53, 54, 54, 52, 53, 49, 48, 47, 45, 41, 41, 38, 36, 34, 33, 31, 30, 28, 28, 25, 26, 24, 23, 21, 19, 19, 18, 17,
+ /* 5.0 */ 16, 16, 16, 16, 16, 15, 13, 13, 13, 13, 12, 12, 13, 13, 14, 14, 15, 16, 16, 17, 16, 17, 16, 15, 15, 14, 13, 12, 11, 10, 9, 8, 6, 5, 4, 3, 1, -0, -1, -3, -4, -6, -8, -10, -12, -13, -15, -16, -17, -19, -20, -21, -23, -24, -25, -26, -27, -28, -29, -30, -30, -30, -31, -31, -31, -30, -29, -29, -28, -27, -26, -24, -23, -22, -21, -19, -18, -17, -15, -14, -13, -11, -10, -9, -8, -7, -6, -5, -4, -3, -1, 0, 2, 4, 6, 6, 8, 9, 10, 12, 13, 14, 12, 16, 27, 23, 22, 13, 3, -0, -2, -5, -6, -5, -8, -9, -10, -15, -13, -14, -19, -24, -25, -27, -33, -34, -33, -34, -34, -34, -36, -35, -35, -34, -33, -31, -29, -26, -24, -21, -18, -16, -13, -10, -7, -4, -1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 17, 17, 17, 18, 19, 20, 20, 21, 23, 23, 27, 30, 30, 29, 27, 26, 24, 25, 24, 22, 20, 20, 17, 16, 18, 21, 19, 19, 20, 21, 20, 18, 16, 14, 12, 9, 6, 4, -1, -5, -8, -8, -7, -9, -9, -10, -11, -12, -11, -11, -11, -12, -13, -13, -13, -13, -15, -14, -15, -17, -21, -24, -29, -30, -31, -34, -36, -39, -41, -46, -49, -53, -54, -54, -53, -54, -55, -56, -57, -60, -62, -64, -66, -70, -74, -78, -81, -84, -88, -91, -94, -96, -97, -96,-100,-101,-102,-103,-105,-107,-106,-105,-103, -99, -95, -90, -86, -80, -73, -67, -60, -54, -52, -50, -49, -42, -29, -26, -21, -17, -13, -8, -3, -1, 0, 3, 8, 12, 17, 20, 23, 27, 31, 34, 39, 44, 49, 54, 57, 59, 62, 62, 64, 66, 67, 64, 65, 53, 56, 68, 70, 69, 70, 71, 69, 68, 68, 67, 67, 66, 66, 65, 66, 65, 64, 63, 62, 61, 61, 59, 55, 54, 53, 52, 54, 52, 51, 51, 49, 47, 45, 43, 40, 40, 36, 34, 33, 30, 30, 29, 28, 27, 25, 24, 23, 22, 21, 18, 18, 17, 16,
+ /* 6.0 */ 16, 16, 16, 16, 15, 13, 12, 11, 12, 12, 12, 12, 13, 13, 14, 14, 15, 15, 16, 17, 16, 16, 15, 14, 13, 13, 12, 11, 10, 8, 7, 6, 5, 4, 3, 1, 0, -1, -3, -5, -6, -8, -10, -11, -13, -15, -16, -18, -19, -20, -22, -23, -24, -25, -27, -28, -29, -30, -31, -31, -32, -32, -32, -32, -32, -31, -31, -30, -29, -28, -26, -25, -24, -23, -21, -20, -18, -17, -15, -14, -12, -11, -10, -9, -8, -6, -5, -4, -3, -2, -1, 1, 3, 4, 6, 8, 9, 10, 13, 13, 14, 14, 12, 19, 26, 20, 13, 20, 6, -3, -5, -7, -10, -8, -6, -7, -13, -17, -16, -19, -23, -26, -27, -28, -32, -32, -32, -33, -33, -36, -38, -38, -38, -36, -34, -32, -30, -27, -24, -22, -19, -16, -13, -10, -7, -4, -1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 18, 18, 19, 20, 21, 22, 23, 25, 28, 30, 31, 31, 29, 29, 27, 27, 28, 27, 27, 26, 25, 21, 19, 19, 20, 19, 20, 21, 22, 23, 20, 18, 15, 12, 10, 8, 5, 1, -3, -6, -6, -6, -7, -8, -9, -11, -11, -10, -10, -11, -12, -13, -13, -13, -13, -13, -13, -13, -14, -18, -23, -26, -29, -30, -32, -34, -37, -40, -42, -49, -52, -53, -55, -54, -54, -54, -55, -57, -58, -60, -62, -66, -70, -74, -78, -82, -85, -88, -91, -94, -96, -97, -97,-100,-101,-102,-102,-104,-105,-100, -98,-100, -98, -95, -90, -85, -79, -73, -67, -60, -55, -55, -54, -52, -40, -34, -30, -23, -19, -15, -10, -7, -5, -3, 0, 6, 10, 14, 17, 21, 24, 28, 31, 35, 42, 47, 53, 53, 56, 60, 67, 65, 66, 67, 70, 64, 45, 60, 68, 68, 67, 67, 69, 66, 66, 67, 66, 66, 65, 64, 64, 64, 64, 63, 63, 61, 60, 59, 58, 57, 53, 53, 52, 52, 50, 49, 50, 48, 45, 43, 41, 38, 36, 35, 32, 31, 29, 29, 28, 28, 25, 27, 24, 23, 21, 21, 18, 18, 16, 16,
+ /* 7.0 */ 16, 15, 15, 15, 14, 11, 11, 11, 11, 11, 11, 12, 12, 13, 13, 14, 14, 14, 15, 15, 15, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 1, -0, -1, -3, -5, -6, -8, -10, -11, -13, -15, -16, -18, -20, -21, -23, -24, -25, -27, -28, -29, -30, -31, -32, -32, -33, -33, -34, -33, -34, -33, -33, -32, -31, -30, -29, -27, -26, -25, -23, -22, -20, -18, -16, -15, -13, -12, -10, -9, -8, -7, -6, -5, -3, -2, -1, 0, 1, 3, 5, 6, 8, 11, 11, 12, 12, 12, 12, 14, 17, 22, 14, 4, 11, 3, -5, -7, -8, -10, -12, -10, -12, -16, -21, -24, -26, -27, -29, -30, -31, -32, -33, -33, -34, -39, -40, -40, -40, -39, -38, -35, -32, -30, -28, -25, -22, -19, -16, -13, -10, -7, -4, -1, 1, 3, 4, 6, 7, 9, 10, 12, 13, 14, 15, 17, 17, 18, 19, 19, 20, 21, 22, 23, 27, 31, 31, 31, 32, 31, 30, 30, 28, 28, 28, 28, 27, 26, 27, 26, 25, 24, 23, 22, 22, 22, 21, 20, 20, 19, 17, 15, 12, 8, 6, 3, -0, -2, -3, -3, -5, -6, -9, -9, -8, -8, -10, -11, -11, -12, -13, -12, -12, -11, -11, -11, -11, -14, -19, -23, -25, -26, -28, -31, -33, -36, -39, -44, -51, -53, -54, -56, -54, -53, -54, -56, -57, -59, -62, -66, -70, -74, -78, -82, -85, -89, -91, -94, -96, -97, -97,-100,-100,-101,-101,-103,-103, -97, -93, -95, -96, -94, -90, -85, -79, -74, -67, -60, -56, -58, -59, -50, -42, -35, -31, -25, -21, -17, -14, -12, -9, -5, -2, 3, 7, 11, 15, 18, 22, 26, 31, 33, 36, 44, 48, 52, 53, 55, 59, 67, 66, 69, 71, 62, 51, 62, 67, 67, 66, 66, 67, 68, 63, 63, 61, 64, 64, 63, 63, 63, 63, 62, 61, 60, 59, 58, 58, 53, 52, 55, 52, 50, 50, 48, 46, 49, 43, 41, 39, 37, 35, 33, 32, 30, 28, 26, 27, 26, 26, 26, 23, 22, 21, 19, 18, 17, 16, 16,
+ /* 8.0 */ 15, 14, 13, 13, 12, 10, 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 15, 14, 14, 13, 14, 13, 12, 11, 10, 9, 8, 7, 6, 6, 5, 4, 2, 1, -0, -1, -3, -4, -6, -8, -9, -11, -13, -14, -16, -18, -19, -22, -23, -25, -26, -27, -29, -30, -31, -32, -33, -34, -35, -35, -35, -35, -35, -35, -35, -34, -33, -32, -31, -29, -28, -27, -25, -23, -22, -20, -18, -16, -15, -13, -12, -10, -9, -8, -6, -5, -4, -3, -2, -0, 1, 2, 4, 5, 7, 9, 11, 12, 14, 15, 15, 15, 15, 12, 9, 4, 2, 4, 0, -5, -9, -10, -11, -13, -14, -18, -21, -25, -27, -29, -30, -31, -33, -35, -37, -38, -37, -39, -43, -43, -42, -42, -40, -37, -35, -32, -30, -28, -25, -21, -18, -15, -12, -10, -7, -5, -3, -2, -0, 2, 4, 6, 7, 9, 10, 12, 13, 15, 17, 19, 19, 19, 20, 21, 23, 24, 31, 33, 30, 32, 34, 35, 34, 31, 30, 29, 27, 28, 27, 26, 26, 26, 26, 26, 25, 25, 24, 24, 22, 21, 20, 19, 18, 16, 14, 12, 9, 6, 4, 2, -1, -1, -2, -3, -5, -5, -6, -7, -7, -9, -10, -10, -11, -12, -12, -10, -8, -8, -9, -11, -12, -16, -19, -21, -22, -25, -28, -29, -31, -34, -39, -47, -52, -53, -54, -55, -52, -53, -54, -55, -58, -62, -66, -70, -74, -78, -81, -85, -88, -91, -93, -95, -96, -97, -99,-100,-100, -97, -99,-100, -96, -94, -95, -95, -92, -88, -84, -78, -73, -67, -62, -58, -58, -60, -49, -43, -36, -32, -27, -23, -19, -17, -14, -11, -7, -3, -0, 4, 8, 13, 16, 20, 25, 29, 33, 36, 38, 46, 50, 52, 54, 56, 60, 67, 71, 71, 65, 55, 61, 65, 64, 64, 64, 64, 64, 63, 63, 65, 58, 63, 63, 62, 61, 62, 59, 60, 60, 59, 59, 58, 52, 50, 52, 49, 48, 49, 46, 44, 42, 41, 39, 37, 35, 33, 31, 30, 29, 28, 28, 27, 25, 26, 23, 22, 22, 20, 19, 18, 16, 16, 15,
+ /* 9.0 */ 14, 13, 13, 12, 11, 10, 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 13, 14, 13, 13, 12, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, -0, -1, -3, -4, -6, -7, -9, -11, -12, -14, -15, -17, -19, -21, -23, -25, -26, -28, -29, -31, -32, -33, -34, -35, -36, -37, -37, -37, -37, -37, -37, -36, -35, -34, -33, -32, -30, -29, -27, -25, -23, -22, -20, -18, -16, -15, -13, -12, -10, -9, -8, -6, -5, -3, -2, -1, 0, 1, 3, 4, 6, 6, 7, 10, 15, 13, 11, 12, 14, 10, 1, 2, -2, -2, -2, -11, -5, -8, -12, -13, -15, -18, -23, -29, -33, -35, -34, -33, -36, -40, -40, -42, -44, -42, -44, -44, -43, -42, -41, -39, -37, -35, -33, -30, -26, -23, -20, -16, -14, -12, -10, -8, -6, -4, -3, -1, 1, 3, 5, 7, 8, 10, 12, 13, 15, 16, 19, 20, 19, 21, 23, 25, 29, 32, 32, 30, 33, 34, 35, 34, 31, 29, 28, 27, 27, 26, 25, 24, 24, 25, 25, 24, 24, 25, 25, 23, 23, 21, 19, 19, 16, 14, 12, 9, 6, 4, 1, -1, -1, -1, -1, -2, -3, -4, -5, -6, -7, -8, -8, -9, -10, -8, -4, -7, -7, -7, -8, -12, -12, -14, -17, -18, -22, -25, -27, -28, -30, -34, -42, -49, -51, -52, -53, -51, -51, -53, -55, -58, -62, -66, -70, -74, -77, -80, -84, -87, -90, -92, -94, -95, -96, -98, -99, -96, -96, -97, -97, -96, -95, -98, -95, -92, -88, -84, -78, -73, -67, -62, -61, -59, -61, -51, -44, -39, -34, -29, -25, -22, -20, -17, -13, -9, -6, -3, 2, 6, 10, 13, 18, 23, 26, 31, 35, 38, 42, 49, 49, 54, 55, 53, 60, 64, 68, 68, 51, 60, 62, 62, 61, 61, 62, 61, 62, 62, 62, 59, 61, 60, 61, 60, 57, 55, 56, 56, 54, 54, 51, 56, 47, 51, 46, 43, 43, 43, 42, 40, 38, 35, 35, 34, 32, 30, 29, 30, 29, 28, 25, 28, 26, 22, 22, 20, 19, 18, 18, 16, 15, 14,
+ /* 10.0 */ 13, 12, 12, 11, 10, 10, 10, 10, 11, 12, 12, 12, 12, 13, 13, 15, 13, 13, 12, 11, 10, 10, 9, 8, 7, 6, 5, 5, 3, 2, 1, 0, -1, -2, -3, -4, -5, -7, -8, -10, -11, -13, -15, -17, -19, -21, -23, -24, -26, -28, -29, -31, -32, -34, -35, -36, -37, -38, -38, -39, -39, -39, -39, -39, -38, -37, -36, -34, -33, -31, -29, -27, -26, -24, -22, -20, -18, -16, -15, -13, -12, -10, -9, -7, -6, -5, -3, -2, -1, 0, 1, 3, 4, 4, 6, 10, 14, 9, 6, 3, 1, 1, -2, -4, -3, -5, -4, -1, -13, -14, -11, -13, -16, -17, -23, -28, -32, -40, -45, -43, -42, -41, -42, -44, -46, -45, -45, -45, -45, -44, -43, -41, -39, -37, -35, -32, -29, -26, -22, -19, -16, -15, -13, -11, -9, -7, -5, -3, -1, 1, 3, 5, 6, 8, 10, 11, 13, 14, 16, 16, 17, 19, 21, 25, 29, 30, 31, 33, 32, 33, 33, 32, 32, 30, 28, 28, 27, 26, 25, 24, 23, 22, 24, 24, 23, 23, 24, 25, 24, 24, 22, 19, 18, 17, 15, 13, 10, 8, 6, 4, 2, 0, -0, -0, -0, -1, -2, -3, -5, -6, -5, -6, -7, -8, -4, -4, -5, -6, -7, -8, -10, -12, -13, -15, -18, -20, -23, -25, -26, -28, -32, -37, -44, -48, -50, -51, -50, -50, -51, -54, -58, -62, -66, -70, -72, -76, -79, -83, -85, -88, -91, -93, -94, -95, -97, -97, -95, -95, -95, -95, -96, -98, -97, -95, -91, -88, -84, -79, -74, -68, -63, -63, -61, -64, -53, -46, -42, -36, -32, -28, -25, -23, -19, -16, -12, -9, -5, -1, 3, 8, 11, 15, 19, 24, 29, 32, 37, 40, 45, 50, 52, 56, 54, 62, 65, 65, 64, 50, 59, 60, 59, 59, 58, 58, 59, 60, 60, 60, 60, 55, 61, 56, 54, 52, 53, 55, 53, 51, 51, 46, 45, 44, 44, 42, 41, 41, 40, 39, 38, 36, 35, 36, 33, 32, 30, 28, 28, 26, 25, 26, 25, 23, 22, 21, 20, 19, 18, 16, 15, 14, 13,
+ /* 11.0 */ 12, 11, 11, 11, 11, 11, 11, 10, 11, 10, 12, 12, 12, 13, 13, 13, 13, 12, 11, 10, 9, 8, 8, 6, 6, 5, 4, 3, 2, 0, -1, -1, -2, -3, -4, -5, -6, -8, -9, -11, -12, -15, -16, -18, -20, -22, -24, -26, -28, -29, -31, -32, -34, -35, -37, -38, -39, -40, -40, -41, -41, -41, -41, -40, -39, -38, -37, -35, -34, -32, -30, -28, -26, -24, -22, -20, -18, -16, -14, -13, -11, -10, -9, -7, -6, -5, -3, -2, -0, 1, 2, 3, 1, -1, 6, 8, 9, 6, 3, 1, -1, -2, -4, -6, -9, -9, 0, -5, -13, -17, -17, -17, -22, -23, -26, -30, -30, -33, -39, -42, -46, -45, -45, -47, -47, -46, -45, -45, -45, -44, -43, -41, -39, -37, -35, -31, -27, -25, -22, -20, -18, -17, -15, -13, -11, -8, -6, -4, -2, 0, 2, 4, 7, 9, 10, 12, 14, 15, 16, 16, 17, 19, 20, 26, 28, 29, 31, 32, 35, 34, 32, 32, 31, 29, 29, 29, 28, 26, 25, 24, 23, 23, 22, 23, 22, 21, 22, 22, 22, 22, 21, 19, 18, 16, 15, 13, 11, 10, 8, 6, 4, 3, 3, 2, 2, 0, -1, -2, -3, -3, -2, -3, -5, -5, -4, -5, -5, -3, -6, -7, -9, -11, -12, -13, -17, -20, -21, -24, -25, -28, -28, -33, -40, -44, -47, -48, -48, -49, -52, -54, -58, -62, -65, -68, -71, -75, -78, -81, -84, -87, -90, -91, -92, -93, -95, -94, -92, -94, -94, -93, -93, -99, -96, -93, -90, -88, -84, -79, -74, -68, -64, -63, -61, -63, -53, -48, -44, -38, -34, -30, -28, -25, -22, -18, -15, -12, -8, -3, 1, 6, 9, 12, 16, 20, 25, 30, 35, 39, 42, 48, 52, 54, 55, 60, 62, 65, 55, 52, 57, 58, 57, 56, 56, 56, 56, 58, 58, 58, 59, 50, 51, 43, 38, 41, 46, 51, 50, 50, 47, 46, 44, 43, 42, 41, 40, 39, 37, 39, 36, 34, 34, 33, 32, 29, 29, 27, 27, 28, 26, 23, 25, 22, 21, 20, 19, 17, 16, 15, 14, 13, 12,
+ /* 12.0 */ 11, 10, 11, 11, 11, 11, 10, 11, 11, 10, 11, 12, 12, 12, 12, 12, 11, 10, 10, 9, 8, 8, 6, 5, 5, 4, 3, 2, 0, -1, -2, -2, -3, -4, -5, -6, -8, -9, -10, -12, -13, -15, -18, -19, -21, -23, -25, -27, -29, -31, -32, -34, -35, -37, -38, -39, -40, -41, -42, -42, -42, -42, -42, -41, -40, -39, -38, -36, -35, -33, -31, -29, -27, -25, -22, -20, -18, -16, -14, -12, -10, -9, -8, -7, -6, -5, -3, -2, -1, -0, -2, -3, -2, -0, 6, 9, 7, 6, 3, 3, 0, -2, -4, -6, -10, -16, -20, -18, -16, -22, -23, -25, -26, -30, -34, -36, -32, -38, -38, -43, -49, -49, -45, -48, -47, -46, -45, -45, -44, -43, -42, -41, -38, -35, -32, -29, -26, -24, -22, -20, -19, -17, -15, -13, -11, -9, -6, -4, -2, 1, 3, 6, 8, 10, 12, 14, 15, 15, 16, 18, 19, 20, 21, 27, 28, 29, 30, 30, 33, 33, 33, 32, 31, 29, 29, 29, 28, 27, 26, 25, 24, 24, 22, 22, 20, 20, 21, 21, 22, 21, 21, 19, 17, 16, 14, 13, 12, 11, 8, 7, 5, 5, 5, 5, 4, 3, 1, -0, -0, -0, -1, -1, -3, -4, -5, -5, -4, -2, -2, -3, -8, -9, -10, -12, -15, -17, -19, -21, -23, -26, -28, -30, -34, -37, -41, -43, -45, -46, -51, -54, -57, -60, -63, -67, -70, -73, -76, -79, -82, -85, -88, -89, -90, -92, -93, -91, -90, -89, -91, -91, -93, -96, -95, -92, -89, -87, -83, -79, -74, -69, -64, -63, -62, -62, -54, -49, -46, -39, -36, -32, -29, -27, -24, -20, -17, -14, -10, -5, 1, 4, 6, 9, 13, 18, 22, 27, 31, 36, 38, 43, 49, 51, 52, 55, 58, 60, 47, 52, 55, 55, 55, 54, 54, 54, 54, 55, 56, 56, 56, 54, 53, 48, 46, 48, 38, 35, 42, 47, 47, 46, 45, 43, 41, 40, 39, 38, 36, 34, 33, 33, 32, 30, 31, 28, 27, 30, 26, 26, 23, 23, 22, 20, 19, 18, 17, 16, 14, 14, 13, 12, 11,
+ /* 13.0 */ 10, 10, 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 12, 12, 12, 11, 11, 10, 8, 8, 7, 6, 5, 4, 3, 2, 1, -0, -1, -2, -3, -4, -4, -5, -6, -7, -9, -10, -11, -13, -14, -16, -18, -20, -22, -24, -26, -28, -30, -32, -34, -35, -37, -38, -39, -41, -42, -43, -43, -43, -43, -43, -43, -42, -41, -40, -39, -37, -35, -33, -31, -30, -28, -25, -23, -20, -18, -16, -14, -12, -11, -9, -8, -7, -6, -5, -4, -4, -6, -5, -3, -1, -0, 4, 7, 7, 6, 5, 2, 0, -2, -4, -6, -8, -11, -17, -22, -24, -26, -26, -30, -35, -38, -40, -40, -37, -35, -38, -42, -39, -48, -48, -46, -47, -46, -46, -45, -44, -44, -43, -41, -40, -37, -34, -31, -27, -25, -24, -22, -20, -18, -17, -15, -13, -11, -9, -6, -3, -1, 2, 4, 7, 9, 11, 13, 14, 16, 16, 17, 19, 20, 21, 23, 29, 30, 31, 31, 31, 31, 31, 32, 33, 31, 29, 28, 28, 28, 27, 26, 26, 25, 24, 23, 22, 21, 20, 19, 20, 21, 21, 20, 19, 17, 15, 14, 13, 12, 11, 10, 8, 7, 6, 7, 7, 8, 6, 4, 2, 2, 2, 1, -1, -2, -2, -4, -4, -3, -3, -1, -2, -5, -8, -9, -11, -11, -15, -18, -19, -21, -23, -26, -28, -31, -34, -37, -40, -42, -44, -47, -52, -57, -59, -62, -65, -68, -71, -74, -77, -80, -83, -86, -87, -88, -89, -89, -91, -88, -86, -87, -89, -92, -93, -92, -90, -87, -86, -82, -78, -73, -69, -65, -62, -62, -61, -57, -50, -47, -41, -38, -34, -32, -29, -25, -22, -20, -16, -12, -7, -2, 1, 3, 6, 11, 15, 19, 24, 28, 32, 36, 38, 38, 47, 50, 51, 53, 46, 45, 51, 53, 53, 52, 52, 52, 52, 52, 54, 54, 55, 55, 54, 53, 52, 53, 54, 53, 46, 32, 40, 47, 46, 44, 42, 41, 39, 38, 36, 34, 35, 32, 31, 30, 30, 29, 28, 26, 26, 24, 22, 21, 20, 20, 18, 17, 16, 15, 14, 14, 13, 12, 12, 10,
+ /* 14.0 */ 9, 10, 10, 10, 9, 9, 9, 9, 9, 9, 10, 11, 11, 11, 11, 10, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, -0, -2, -3, -3, -4, -4, -5, -6, -7, -8, -10, -11, -12, -14, -15, -17, -19, -21, -23, -25, -27, -29, -32, -33, -35, -36, -38, -39, -40, -42, -43, -44, -44, -44, -44, -44, -44, -43, -42, -41, -39, -37, -36, -34, -32, -30, -28, -25, -23, -21, -18, -16, -14, -13, -11, -9, -8, -7, -6, -6, -9, -7, -4, -3, 0, 3, 4, 5, 6, 6, 3, 2, 1, -1, -3, -6, -8, -12, -15, -18, -21, -23, -25, -29, -33, -35, -36, -37, -37, -37, -37, -38, -41, -39, -47, -53, -49, -48, -48, -47, -46, -44, -43, -42, -41, -38, -35, -32, -29, -26, -25, -23, -21, -20, -18, -16, -14, -11, -9, -7, -5, -2, 0, 3, 6, 8, 10, 13, 15, 17, 18, 18, 19, 20, 21, 24, 26, 29, 30, 30, 31, 32, 30, 31, 31, 31, 30, 29, 29, 28, 29, 27, 25, 25, 24, 23, 23, 22, 21, 20, 19, 19, 20, 20, 20, 19, 17, 15, 14, 14, 13, 11, 10, 9, 8, 8, 10, 9, 9, 7, 5, 4, 4, 3, 2, 1, -0, -1, -2, -2, -3, -5, -5, -2, -4, -6, -8, -10, -8, -10, -14, -17, -19, -22, -24, -26, -29, -31, -34, -36, -39, -41, -45, -51, -54, -58, -60, -63, -66, -69, -72, -75, -78, -81, -83, -84, -86, -87, -86, -88, -86, -85, -87, -89, -90, -92, -91, -88, -86, -86, -80, -77, -73, -69, -65, -62, -62, -60, -59, -51, -46, -42, -38, -35, -33, -30, -27, -24, -21, -18, -14, -9, -4, -2, -0, 3, 8, 12, 17, 21, 26, 30, 34, 34, 36, 44, 48, 50, 52, 44, 46, 50, 50, 50, 50, 50, 50, 50, 51, 52, 52, 53, 53, 53, 53, 53, 53, 54, 55, 55, 43, 32, 43, 44, 43, 42, 40, 38, 37, 34, 36, 34, 31, 30, 29, 30, 27, 26, 27, 24, 24, 24, 22, 19, 18, 17, 16, 14, 14, 14, 14, 12, 11, 9, 9,
+ /* 15.0 */ 9, 9, 8, 9, 8, 8, 8, 8, 8, 9, 8, 10, 10, 11, 10, 10, 9, 8, 7, 6, 5, 4, 3, 3, 2, 1, -1, -2, -3, -4, -4, -5, -6, -8, -9, -10, -12, -13, -14, -15, -17, -18, -20, -22, -24, -26, -28, -31, -33, -35, -36, -38, -39, -40, -41, -42, -44, -44, -45, -45, -45, -45, -44, -44, -42, -41, -39, -38, -36, -34, -32, -31, -29, -26, -23, -21, -19, -17, -15, -13, -11, -10, -9, -9, -9, -10, -5, -5, 1, 4, 2, 2, 2, 4, 4, 3, 1, -1, -1, -3, -6, -8, -10, -14, -15, -18, -21, -21, -24, -28, -30, -32, -35, -37, -38, -40, -39, -40, -42, -40, -55, -56, -49, -50, -49, -49, -47, -44, -43, -41, -38, -36, -33, -31, -28, -26, -25, -23, -21, -19, -17, -15, -13, -10, -8, -5, -3, -0, 3, 5, 8, 10, 13, 15, 18, 20, 25, 25, 21, 22, 23, 25, 28, 30, 29, 31, 32, 33, 29, 30, 30, 30, 29, 28, 28, 28, 29, 28, 26, 24, 22, 22, 23, 22, 21, 21, 20, 19, 19, 20, 20, 19, 17, 15, 15, 14, 13, 12, 10, 10, 10, 9, 11, 11, 10, 9, 7, 7, 6, 5, 4, 3, 2, 0, 0, 0, -1, -3, -3, 1, -4, -6, -7, -9, -5, -8, -12, -15, -16, -18, -21, -24, -27, -29, -32, -34, -37, -40, -45, -50, -54, -57, -58, -61, -64, -67, -70, -73, -76, -79, -81, -82, -84, -83, -84, -83, -84, -85, -87, -88, -87, -88, -89, -87, -84, -83, -79, -76, -72, -69, -64, -61, -60, -62, -56, -50, -47, -43, -39, -36, -34, -31, -29, -27, -24, -21, -17, -12, -7, -5, -3, 2, 6, 9, 14, 18, 23, 27, 31, 32, 41, 43, 41, 42, 44, 42, 45, 47, 47, 48, 48, 48, 48, 49, 49, 50, 51, 51, 52, 52, 52, 52, 52, 54, 55, 55, 50, 37, 40, 43, 44, 42, 40, 38, 36, 35, 31, 30, 29, 29, 29, 28, 25, 26, 24, 23, 22, 19, 18, 19, 16, 15, 14, 13, 13, 12, 12, 11, 10, 9, 9,
+ /* 16.0 */ 7, 7, 8, 8, 8, 8, 8, 8, 8, 9, 10, 10, 10, 9, 10, 9, 8, 8, 7, 6, 5, 4, 4, 4, 3, 1, -0, -2, -3, -4, -5, -6, -7, -8, -10, -11, -13, -14, -16, -17, -19, -21, -22, -24, -26, -27, -29, -32, -34, -35, -37, -39, -40, -41, -42, -43, -44, -45, -45, -46, -46, -45, -45, -44, -43, -42, -40, -38, -36, -34, -33, -31, -29, -26, -24, -21, -19, -17, -15, -15, -14, -12, -8, -3, -3, -8, -6, -2, -2, -3, -2, -1, -3, -2, -0, -1, -2, -2, -4, -5, -7, -10, -13, -15, -17, -19, -23, -25, -27, -29, -31, -34, -37, -39, -41, -42, -42, -41, -41, -42, -61, -55, -49, -46, -46, -47, -46, -44, -42, -40, -38, -34, -32, -29, -27, -25, -24, -22, -20, -18, -16, -14, -11, -8, -5, -3, -1, 3, 5, 8, 10, 13, 15, 17, 19, 21, 23, 31, 25, 24, 25, 26, 27, 30, 30, 32, 33, 32, 28, 28, 29, 29, 28, 28, 28, 28, 29, 29, 28, 27, 24, 23, 24, 23, 21, 22, 21, 21, 21, 21, 21, 19, 17, 17, 15, 14, 13, 12, 11, 10, 11, 11, 11, 12, 11, 10, 9, 8, 7, 6, 5, 5, 3, 2, 2, 1, 0, 0, 1, -1, -3, -4, -5, -6, -5, -9, -12, -15, -17, -19, -21, -23, -26, -29, -31, -33, -36, -40, -44, -47, -52, -56, -56, -59, -62, -65, -67, -70, -74, -75, -78, -80, -80, -80, -80, -80, -81, -83, -85, -85, -83, -81, -82, -84, -83, -81, -78, -75, -72, -68, -64, -61, -60, -61, -56, -51, -47, -44, -40, -37, -35, -32, -31, -30, -27, -23, -19, -14, -12, -9, -6, -1, 4, 7, 13, 16, 20, 24, 29, 31, 41, 43, 38, 33, 41, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 49, 49, 50, 51, 51, 51, 52, 52, 53, 54, 54, 53, 40, 36, 43, 42, 41, 41, 37, 35, 36, 31, 30, 29, 28, 28, 25, 24, 26, 23, 22, 20, 20, 18, 17, 16, 15, 13, 12, 12, 11, 11, 10, 9, 8, 7,
+ /* 17.0 */ 7, 7, 6, 7, 7, 8, 8, 8, 9, 9, 10, 10, 10, 9, 9, 8, 8, 7, 6, 6, 6, 5, 5, 5, 4, 2, 0, -1, -3, -4, -5, -7, -8, -9, -10, -12, -14, -15, -17, -19, -21, -22, -23, -25, -27, -29, -31, -33, -35, -36, -38, -39, -40, -42, -43, -44, -45, -45, -46, -46, -46, -46, -45, -44, -44, -42, -40, -39, -37, -35, -33, -31, -30, -27, -24, -22, -20, -20, -19, -14, -8, -5, -3, -2, -6, -9, -7, -5, -5, -6, -5, -4, -5, -9, -9, -8, -6, -6, -7, -8, -10, -12, -14, -17, -19, -21, -25, -29, -30, -33, -38, -41, -43, -44, -45, -45, -43, -42, -41, -56, -62, -53, -49, -49, -48, -47, -44, -42, -41, -39, -36, -34, -31, -28, -25, -24, -22, -21, -19, -17, -15, -13, -10, -7, -4, -1, 2, 5, 8, 10, 13, 15, 16, 18, 21, 29, 25, 27, 25, 25, 26, 27, 27, 30, 32, 32, 34, 30, 27, 27, 28, 28, 28, 28, 28, 27, 28, 29, 28, 28, 27, 26, 25, 24, 22, 23, 22, 22, 22, 24, 23, 21, 20, 19, 17, 15, 14, 13, 11, 10, 11, 11, 12, 13, 12, 11, 10, 10, 8, 8, 7, 5, 4, 4, 3, 3, 2, 1, 0, -1, -2, -3, -4, -4, -4, -8, -12, -16, -20, -22, -23, -24, -25, -28, -32, -34, -36, -39, -42, -44, -50, -55, -55, -56, -59, -62, -64, -69, -71, -72, -75, -77, -76, -77, -78, -77, -78, -79, -79, -80, -80, -77, -75, -78, -80, -80, -77, -73, -71, -67, -63, -61, -60, -60, -58, -51, -48, -44, -41, -38, -37, -33, -32, -30, -27, -25, -20, -17, -15, -11, -8, -5, 1, 4, 8, 12, 16, 21, 25, 28, 34, 43, 41, 33, 40, 43, 42, 42, 43, 43, 44, 44, 44, 44, 45, 47, 48, 49, 50, 50, 51, 51, 51, 52, 53, 52, 49, 38, 31, 40, 44, 40, 41, 37, 37, 32, 31, 30, 28, 27, 26, 24, 23, 24, 21, 20, 19, 18, 17, 16, 14, 13, 12, 11, 11, 10, 9, 9, 8, 7, 7,
+ /* 18.0 */ 6, 6, 6, 7, 8, 9, 9, 8, 9, 9, 9, 10, 9, 9, 8, 8, 8, 7, 7, 7, 7, 7, 7, 6, 3, 1, -1, -2, -3, -5, -6, -7, -8, -10, -11, -13, -15, -16, -18, -20, -22, -23, -25, -26, -28, -30, -32, -34, -36, -37, -39, -40, -41, -42, -43, -44, -45, -46, -46, -47, -47, -46, -46, -45, -44, -42, -41, -39, -37, -35, -33, -32, -30, -28, -25, -23, -23, -18, -14, -9, -7, -6, -4, -6, -12, -11, -13, -11, -10, -8, -7, -6, -8, -11, -11, -12, -12, -13, -11, -12, -15, -16, -15, -15, -20, -23, -25, -28, -29, -34, -38, -41, -45, -42, -42, -45, -46, -43, -49, -62, -58, -51, -48, -47, -45, -44, -42, -41, -39, -38, -35, -33, -30, -27, -24, -23, -21, -19, -18, -16, -14, -12, -9, -6, -3, -0, 3, 6, 9, 12, 14, 16, 18, 20, 22, 24, 25, 25, 26, 27, 26, 26, 26, 28, 33, 32, 35, 31, 30, 29, 28, 28, 28, 27, 27, 27, 27, 27, 29, 29, 29, 28, 27, 26, 24, 23, 23, 23, 24, 27, 25, 23, 22, 20, 18, 16, 15, 15, 13, 12, 12, 11, 11, 12, 13, 12, 11, 11, 9, 8, 7, 6, 6, 5, 4, 4, 4, 3, 0, -1, -1, -2, -2, -0, -4, -9, -14, -18, -22, -25, -27, -28, -29, -32, -34, -34, -35, -36, -40, -44, -48, -54, -53, -54, -56, -58, -62, -66, -66, -69, -72, -70, -71, -75, -74, -75, -75, -75, -75, -75, -75, -75, -72, -70, -72, -76, -74, -71, -69, -67, -63, -60, -59, -59, -55, -50, -48, -44, -42, -39, -37, -34, -32, -32, -30, -25, -21, -19, -16, -13, -8, -6, -4, 1, 5, 9, 13, 18, 22, 25, 31, 39, 37, 31, 36, 38, 40, 40, 41, 41, 41, 42, 42, 43, 43, 45, 46, 47, 48, 49, 50, 50, 50, 52, 51, 50, 44, 37, 31, 39, 41, 43, 38, 36, 33, 32, 30, 28, 26, 25, 24, 22, 21, 21, 20, 19, 18, 18, 16, 14, 12, 15, 12, 11, 10, 9, 8, 7, 7, 6, 6,
+ /* 19.0 */ 5, 5, 5, 5, 6, 7, 8, 9, 8, 10, 9, 10, 9, 9, 8, 8, 8, 8, 7, 8, 7, 7, 7, 6, 13, 8, -2, -2, -3, -5, -7, -8, -9, -10, -12, -14, -16, -17, -19, -21, -22, -24, -25, -27, -29, -31, -33, -35, -36, -38, -39, -40, -42, -43, -44, -44, -46, -46, -47, -47, -47, -47, -46, -45, -44, -43, -41, -39, -37, -35, -34, -32, -30, -28, -28, -25, -19, -16, -13, -11, -7, -5, -4, -6, -13, -13, -14, -12, -11, -10, -9, -7, -7, -12, -12, -14, -13, -14, -16, -16, -20, -22, -24, -26, -27, -27, -27, -28, -27, -29, -36, -44, -55, -62, -61, -55, -55, -61, -62, -57, -52, -48, -48, -47, -45, -43, -41, -40, -39, -37, -34, -32, -29, -25, -23, -21, -19, -17, -16, -14, -12, -10, -8, -5, -2, 1, 4, 8, 11, 14, 15, 17, 18, 20, 22, 23, 24, 26, 27, 27, 26, 26, 26, 29, 33, 34, 35, 32, 31, 31, 30, 28, 28, 27, 26, 26, 26, 27, 28, 30, 31, 30, 30, 28, 26, 25, 24, 23, 25, 28, 26, 25, 23, 21, 19, 18, 18, 18, 17, 16, 13, 11, 11, 12, 13, 12, 12, 13, 11, 9, 8, 8, 7, 6, 5, 5, 5, 5, 2, 1, -0, -1, 1, -0, -5, -10, -15, -19, -23, -27, -29, -31, -32, -34, -36, -37, -36, -35, -37, -42, -43, -50, -50, -52, -54, -56, -58, -60, -63, -67, -65, -67, -69, -69, -70, -70, -71, -72, -71, -72, -72, -70, -68, -65, -67, -67, -70, -68, -67, -65, -63, -60, -60, -57, -51, -49, -48, -44, -41, -39, -38, -35, -33, -31, -29, -27, -24, -21, -18, -14, -10, -7, -4, 0, 4, 7, 10, 15, 19, 22, 24, 30, 33, 30, 33, 35, 37, 38, 39, 39, 40, 40, 40, 41, 42, 43, 45, 46, 47, 49, 49, 49, 49, 51, 50, 48, 42, 35, 33, 38, 38, 38, 37, 35, 33, 31, 29, 26, 25, 23, 22, 21, 20, 19, 17, 19, 15, 17, 14, 12, 11, 10, 9, 9, 7, 7, 7, 6, 6, 6, 5,
+ /* 20.0 */ 4, 5, 4, 4, 4, 5, 6, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 7, 5, 6, 18, 12, -2, -3, -4, -5, -7, -8, -10, -11, -13, -15, -17, -18, -20, -22, -23, -24, -26, -28, -29, -31, -33, -35, -36, -38, -39, -41, -42, -43, -44, -45, -46, -47, -47, -48, -48, -47, -46, -46, -44, -43, -41, -40, -38, -36, -34, -32, -30, -29, -29, -21, -16, -14, -12, -10, -7, -6, -6, -10, -15, -19, -17, -16, -13, -12, -11, -10, -9, -13, -16, -15, -17, -17, -18, -19, -19, -21, -23, -25, -26, -27, -36, -37, -41, -45, -47, -51, -59, -62, -65, -63, -59, -57, -53, -50, -47, -46, -45, -46, -45, -43, -41, -40, -38, -36, -33, -30, -27, -24, -21, -18, -17, -15, -14, -12, -10, -8, -6, -4, -1, 2, 6, 9, 13, 15, 17, 18, 19, 20, 21, 23, 23, 25, 26, 25, 25, 26, 28, 31, 33, 34, 34, 34, 33, 32, 30, 29, 27, 27, 27, 27, 27, 27, 29, 30, 31, 31, 32, 30, 28, 27, 25, 24, 25, 27, 27, 25, 23, 21, 20, 20, 22, 23, 24, 20, 14, 12, 12, 12, 13, 14, 14, 14, 12, 11, 10, 9, 9, 8, 7, 6, 7, 6, 3, 2, 2, 2, 3, -1, -5, -10, -15, -20, -24, -28, -31, -33, -34, -35, -36, -37, -35, -33, -35, -39, -43, -48, -49, -50, -52, -55, -56, -57, -61, -63, -61, -64, -65, -66, -66, -67, -67, -67, -68, -68, -68, -67, -65, -65, -63, -63, -64, -64, -62, -61, -60, -57, -55, -53, -50, -51, -48, -44, -42, -39, -37, -35, -34, -31, -30, -28, -25, -23, -21, -17, -13, -9, -6, -2, 2, 5, 9, 13, 17, 20, 21, 22, 31, 28, 31, 33, 34, 35, 36, 37, 38, 38, 39, 40, 41, 42, 44, 45, 47, 48, 49, 49, 49, 50, 49, 47, 41, 31, 36, 41, 41, 37, 36, 33, 31, 28, 28, 27, 24, 21, 22, 21, 19, 18, 15, 14, 13, 13, 11, 10, 9, 7, 8, 6, 6, 5, 7, 5, 5, 4, 4,
+ /* 21.0 */ 3, 2, 2, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 9, 9, 9, 9, 8, 7, 6, 6, 12, 15, 10, -0, -2, -3, -4, -6, -8, -9, -11, -12, -14, -16, -17, -19, -20, -22, -23, -25, -27, -28, -30, -32, -34, -35, -36, -38, -40, -41, -42, -43, -45, -46, -46, -47, -48, -48, -47, -47, -47, -46, -45, -43, -42, -40, -38, -36, -34, -32, -31, -30, -28, -22, -18, -15, -13, -11, -10, -10, -13, -15, -19, -22, -21, -21, -14, -13, -14, -12, -12, -11, -18, -19, -20, -20, -22, -23, -24, -21, -23, -25, -29, -34, -42, -44, -46, -44, -48, -51, -51, -51, -52, -52, -51, -51, -51, -50, -49, -47, -45, -44, -44, -42, -41, -39, -36, -34, -31, -29, -26, -22, -19, -16, -15, -13, -12, -10, -8, -6, -4, -2, 1, 4, 7, 11, 14, 16, 17, 18, 18, 19, 20, 21, 22, 23, 24, 24, 24, 25, 28, 32, 35, 36, 35, 35, 35, 33, 32, 30, 29, 28, 27, 27, 27, 27, 29, 29, 30, 31, 32, 32, 30, 29, 28, 26, 26, 28, 27, 25, 24, 22, 21, 22, 25, 29, 30, 24, 17, 14, 13, 13, 13, 15, 15, 14, 13, 11, 10, 9, 10, 9, 9, 9, 8, 6, 4, 3, 4, 6, 4, -0, -4, -8, -13, -19, -24, -28, -31, -33, -35, -35, -36, -36, -35, -34, -33, -35, -40, -43, -46, -48, -50, -55, -55, -57, -58, -57, -57, -59, -61, -62, -63, -63, -63, -63, -64, -64, -65, -65, -64, -64, -62, -60, -60, -62, -59, -58, -57, -56, -54, -52, -51, -52, -48, -43, -42, -39, -37, -36, -34, -32, -31, -29, -27, -24, -22, -19, -15, -11, -8, -4, -1, 3, 8, 12, 15, 18, 19, 21, 28, 26, 29, 31, 33, 34, 35, 36, 36, 37, 38, 39, 40, 41, 42, 45, 46, 47, 48, 48, 48, 49, 48, 44, 35, 29, 38, 37, 36, 34, 33, 33, 29, 30, 26, 25, 23, 19, 19, 18, 16, 16, 14, 12, 12, 10, 9, 8, 7, 6, 5, 4, 5, 4, 5, 6, 4, 4, 3,
+ /* 22.0 */ 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 9, 9, 8, 8, 7, 8, 14, 11, 7, 2, -1, -0, -1, -3, -5, -7, -9, -10, -11, -13, -15, -16, -18, -20, -21, -23, -24, -25, -27, -29, -31, -32, -34, -35, -36, -38, -39, -41, -42, -43, -45, -45, -46, -47, -47, -48, -47, -47, -47, -46, -45, -43, -42, -40, -38, -37, -35, -33, -31, -29, -25, -22, -18, -15, -13, -12, -12, -14, -16, -19, -24, -26, -24, -24, -18, -16, -15, -15, -14, -13, -18, -20, -19, -17, -18, -20, -21, -23, -24, -29, -32, -37, -38, -42, -43, -49, -51, -51, -51, -51, -52, -52, -52, -52, -51, -50, -50, -49, -47, -45, -44, -42, -40, -38, -36, -34, -31, -27, -24, -21, -17, -14, -13, -11, -10, -8, -6, -4, -2, 0, 3, 6, 9, 11, 14, 15, 17, 17, 17, 18, 19, 20, 22, 23, 24, 24, 24, 25, 27, 33, 36, 36, 36, 37, 37, 35, 33, 32, 30, 29, 27, 26, 25, 25, 27, 29, 30, 31, 32, 32, 31, 32, 31, 30, 30, 30, 27, 27, 25, 24, 23, 24, 26, 28, 28, 26, 20, 17, 15, 13, 13, 15, 15, 14, 13, 12, 11, 10, 9, 9, 10, 11, 8, 6, 5, 4, 6, 6, 4, 1, -2, -6, -10, -16, -23, -27, -31, -33, -34, -34, -34, -35, -35, -33, -32, -32, -36, -41, -42, -45, -44, -49, -52, -53, -54, -54, -54, -56, -58, -60, -60, -60, -61, -60, -59, -60, -60, -61, -62, -62, -60, -58, -58, -59, -58, -57, -57, -56, -54, -51, -51, -51, -48, -44, -42, -40, -38, -37, -34, -33, -30, -30, -29, -26, -23, -20, -17, -14, -10, -6, -2, 1, 5, 10, 14, 17, 19, 22, 23, 24, 27, 28, 30, 32, 34, 35, 35, 36, 37, 38, 39, 40, 41, 44, 45, 47, 48, 47, 49, 47, 43, 33, 26, 32, 37, 37, 36, 34, 32, 30, 27, 26, 23, 22, 20, 19, 17, 16, 15, 13, 11, 10, 8, 7, 7, 6, 5, 4, 3, 3, 2, 4, 2, 2, 3, 2, 1,
+ /* 23.0 */ -1, -1, -0, 1, 1, 2, 3, 4, 5, 6, 7, 7, 7, 6, 7, 8, 10, 11, 12, 7, 4, 4, 3, 3, 3, 2, -0, -3, -6, -8, -9, -11, -12, -14, -16, -17, -18, -20, -21, -22, -24, -26, -27, -29, -31, -33, -34, -35, -36, -38, -40, -41, -42, -43, -45, -46, -46, -47, -47, -48, -47, -47, -46, -46, -45, -43, -42, -40, -39, -37, -33, -33, -31, -28, -25, -21, -18, -16, -14, -13, -13, -16, -18, -22, -26, -29, -27, -26, -27, -25, -20, -16, -17, -18, -19, -23, -23, -22, -22, -23, -24, -25, -24, -27, -30, -36, -39, -44, -47, -49, -50, -51, -51, -52, -52, -52, -53, -53, -52, -51, -50, -49, -47, -46, -44, -42, -39, -37, -34, -31, -29, -26, -22, -19, -16, -12, -11, -9, -8, -6, -4, -2, -1, 2, 4, 7, 9, 11, 13, 15, 16, 17, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 29, 33, 36, 38, 37, 39, 38, 36, 35, 33, 31, 29, 28, 26, 25, 25, 27, 27, 30, 32, 32, 33, 33, 34, 36, 34, 33, 31, 29, 29, 27, 25, 25, 26, 27, 27, 27, 25, 22, 19, 16, 14, 14, 14, 15, 14, 13, 13, 11, 10, 10, 9, 11, 11, 8, 7, 6, 6, 7, 6, 5, 2, 0, -3, -8, -13, -20, -26, -30, -32, -33, -33, -33, -33, -33, -30, -28, -30, -38, -40, -43, -46, -45, -47, -47, -48, -50, -51, -52, -53, -55, -56, -57, -56, -57, -58, -59, -60, -58, -59, -60, -60, -57, -55, -56, -56, -57, -56, -56, -55, -54, -51, -51, -51, -48, -44, -43, -41, -39, -37, -35, -33, -31, -30, -29, -28, -26, -22, -19, -15, -12, -8, -4, -0, 4, 8, 13, 16, 19, 26, 20, 17, 19, 22, 26, 30, 32, 34, 35, 36, 37, 38, 39, 40, 39, 42, 44, 46, 47, 48, 47, 40, 33, 27, 31, 35, 36, 35, 34, 31, 29, 31, 25, 24, 23, 21, 19, 15, 14, 13, 12, 11, 9, 8, 7, 5, 4, 3, 2, 2, 1, 1, 1, -0, 1, 0, -0, -1, -1,
+ /* 24.0 */ -2, -2, -1, -0, 0, 2, 2, 3, 4, 4, 4, 6, 7, 12, 14, 10, 7, 5, 5, 4, 4, 4, 4, 3, 2, 1, -2, -5, -7, -9, -10, -11, -13, -14, -16, -17, -19, -20, -21, -22, -24, -26, -28, -29, -31, -33, -34, -36, -37, -39, -40, -41, -42, -43, -44, -45, -46, -47, -47, -47, -47, -47, -46, -45, -44, -43, -42, -41, -37, -35, -33, -33, -30, -27, -22, -19, -18, -17, -15, -14, -13, -18, -20, -23, -28, -31, -31, -28, -28, -29, -28, -24, -21, -23, -24, -26, -25, -25, -26, -26, -26, -27, -27, -32, -34, -39, -43, -45, -48, -50, -51, -52, -52, -52, -51, -52, -52, -53, -52, -51, -50, -49, -47, -46, -44, -41, -39, -36, -34, -31, -28, -25, -21, -17, -13, -11, -9, -7, -5, -3, -2, 0, 2, 3, 5, 7, 9, 11, 14, 16, 17, 18, 19, 20, 20, 22, 23, 24, 25, 27, 28, 30, 31, 33, 35, 37, 40, 39, 38, 38, 36, 34, 33, 31, 30, 29, 27, 26, 26, 28, 29, 31, 32, 33, 34, 36, 37, 37, 35, 34, 33, 30, 28, 26, 26, 26, 27, 27, 26, 25, 22, 20, 17, 15, 14, 15, 14, 14, 13, 13, 12, 12, 11, 10, 11, 11, 9, 8, 8, 8, 8, 8, 6, 4, 2, -2, -5, -11, -18, -24, -28, -31, -33, -33, -33, -33, -30, -27, -30, -36, -37, -39, -42, -45, -47, -48, -45, -46, -46, -48, -48, -49, -51, -52, -53, -54, -55, -55, -56, -58, -58, -59, -59, -59, -58, -57, -56, -55, -56, -56, -55, -55, -55, -52, -51, -51, -49, -46, -43, -41, -39, -37, -36, -33, -32, -32, -31, -29, -27, -24, -20, -17, -13, -10, -6, -2, 2, 6, 10, 14, 17, 24, 15, 18, 21, 23, 27, 25, 29, 32, 35, 36, 37, 37, 37, 38, 39, 42, 44, 45, 46, 48, 44, 35, 29, 36, 37, 35, 34, 32, 33, 30, 28, 25, 24, 21, 20, 19, 16, 16, 13, 12, 11, 9, 7, 5, 4, 3, 2, 1, 1, -0, -1, -1, -1, -1, -2, -2, -3, -2, -2,
+ /* 25.0 */ -3, -2, -1, -1, -1, -0, 1, 0, 5, 6, 7, 6, 14, 7, 3, 4, 4, 4, 4, 4, 3, 3, 2, 1, -0, -2, -4, -7, -8, -10, -11, -12, -14, -15, -16, -17, -19, -20, -21, -23, -25, -26, -28, -30, -31, -33, -34, -36, -38, -39, -41, -42, -43, -44, -45, -46, -46, -47, -47, -47, -47, -46, -45, -45, -43, -43, -41, -39, -37, -34, -35, -33, -30, -26, -22, -21, -20, -19, -16, -15, -16, -19, -23, -22, -27, -32, -32, -30, -28, -27, -27, -28, -28, -26, -24, -27, -23, -23, -24, -24, -28, -28, -32, -33, -39, -43, -44, -47, -49, -51, -52, -52, -52, -51, -51, -51, -51, -52, -52, -51, -49, -48, -47, -45, -43, -41, -38, -35, -33, -29, -26, -22, -19, -15, -11, -8, -7, -4, -2, -0, 1, 3, 5, 6, 8, 9, 11, 13, 15, 17, 18, 19, 21, 21, 21, 22, 23, 25, 26, 28, 31, 33, 33, 31, 34, 34, 37, 39, 40, 39, 38, 36, 34, 32, 31, 30, 29, 28, 27, 27, 27, 28, 28, 30, 33, 35, 36, 36, 36, 35, 33, 30, 29, 27, 26, 25, 27, 28, 26, 25, 22, 20, 19, 17, 16, 15, 14, 13, 13, 13, 13, 13, 13, 12, 13, 12, 10, 9, 10, 10, 10, 9, 8, 5, 2, -2, -5, -10, -16, -22, -27, -30, -31, -32, -33, -33, -28, -27, -29, -30, -32, -32, -34, -36, -38, -42, -43, -43, -45, -46, -46, -46, -48, -49, -48, -52, -54, -54, -56, -59, -60, -60, -60, -62, -62, -62, -61, -59, -56, -55, -54, -53, -52, -51, -50, -51, -49, -45, -41, -40, -39, -37, -35, -33, -31, -32, -32, -30, -27, -25, -21, -17, -14, -11, -7, -4, 1, 5, 9, 12, 15, 18, 20, 22, 25, 28, 26, 25, 24, 29, 33, 36, 34, 36, 37, 37, 39, 41, 43, 44, 46, 47, 42, 33, 38, 38, 35, 34, 32, 31, 28, 27, 26, 24, 21, 19, 17, 15, 14, 13, 10, 9, 9, 7, 5, 3, 2, 1, 0, -1, -1, -2, -3, -3, -3, -4, -4, -4, -4, -3, -3,
+ /* 26.0 */ -4, -3, -3, -2, -2, -1, 6, 2, 5, 6, 3, 5, 5, 3, 4, 4, 4, 3, 3, 2, 2, 1, -0, -2, -3, -5, -7, -8, -9, -11, -12, -13, -14, -15, -17, -18, -19, -20, -22, -23, -25, -27, -28, -30, -32, -33, -35, -36, -38, -39, -41, -42, -43, -44, -45, -46, -46, -46, -46, -46, -46, -46, -45, -44, -43, -42, -41, -37, -36, -35, -35, -31, -29, -24, -21, -21, -21, -20, -18, -19, -20, -23, -25, -23, -27, -33, -31, -29, -29, -29, -27, -26, -26, -25, -26, -28, -25, -25, -24, -26, -28, -30, -33, -39, -44, -43, -45, -48, -50, -51, -53, -52, -51, -50, -50, -50, -50, -51, -51, -50, -49, -47, -46, -44, -42, -39, -37, -34, -31, -28, -24, -21, -17, -13, -10, -6, -4, -2, 1, 2, 4, 6, 7, 9, 11, 12, 13, 15, 17, 19, 20, 22, 23, 24, 24, 24, 25, 26, 27, 29, 32, 34, 34, 31, 31, 34, 36, 39, 39, 40, 40, 37, 35, 33, 32, 32, 31, 30, 28, 27, 26, 26, 26, 28, 30, 32, 34, 33, 33, 32, 31, 29, 28, 27, 26, 26, 28, 30, 28, 26, 24, 22, 21, 19, 17, 15, 14, 13, 13, 12, 13, 13, 13, 13, 14, 12, 11, 13, 12, 12, 11, 10, 8, 5, 2, -1, -5, -10, -15, -21, -26, -28, -30, -31, -32, -33, -31, -26, -22, -24, -26, -28, -30, -31, -31, -35, -40, -42, -44, -45, -45, -45, -46, -48, -48, -49, -53, -55, -57, -59, -61, -62, -64, -66, -66, -65, -64, -62, -58, -53, -50, -49, -48, -53, -55, -52, -49, -46, -42, -39, -38, -37, -36, -33, -31, -31, -30, -28, -26, -24, -21, -19, -16, -13, -9, -6, -1, 3, 7, 10, 13, 16, 19, 22, 26, 28, 29, 29, 28, 25, 28, 33, 36, 36, 36, 37, 39, 40, 42, 43, 44, 43, 39, 35, 39, 38, 36, 34, 32, 28, 27, 26, 24, 22, 19, 17, 14, 13, 11, 10, 8, 7, 6, 5, 3, 2, 1, -0, -2, -3, -3, -4, -5, -5, -5, -5, -5, -5, -4, -4, -4,
+ /* 27.0 */ -4, -5, -4, -1, -1, -3, -3, -3, -1, -1, 1, 2, 2, 3, 3, 3, 2, 1, 0, 0, -1, -2, -3, -5, -6, -7, -8, -10, -11, -12, -13, -14, -15, -16, -17, -18, -20, -21, -23, -24, -26, -28, -29, -31, -32, -33, -35, -36, -38, -39, -41, -42, -43, -44, -45, -45, -45, -46, -46, -46, -45, -45, -44, -43, -43, -43, -38, -37, -36, -36, -33, -31, -27, -24, -23, -22, -21, -20, -20, -21, -22, -25, -26, -25, -28, -31, -30, -29, -29, -29, -27, -26, -26, -27, -29, -27, -25, -26, -26, -27, -30, -30, -33, -38, -44, -44, -45, -48, -50, -52, -52, -52, -51, -49, -49, -49, -49, -49, -49, -49, -48, -46, -45, -43, -41, -38, -35, -33, -30, -26, -23, -19, -15, -12, -8, -4, -1, 1, 3, 5, 7, 8, 10, 12, 14, 15, 17, 18, 20, 21, 23, 23, 25, 26, 26, 26, 25, 26, 28, 30, 31, 34, 34, 33, 32, 32, 36, 38, 39, 39, 40, 38, 38, 35, 33, 33, 33, 32, 30, 27, 26, 26, 25, 26, 27, 29, 30, 30, 30, 30, 29, 29, 28, 27, 27, 28, 30, 31, 30, 27, 25, 23, 22, 20, 18, 16, 15, 14, 14, 14, 13, 13, 13, 14, 13, 12, 14, 15, 14, 12, 11, 10, 7, 4, 1, -2, -6, -10, -15, -20, -25, -27, -29, -28, -26, -26, -30, -28, -20, -22, -24, -25, -27, -29, -31, -31, -35, -40, -45, -43, -45, -45, -44, -46, -48, -47, -50, -54, -57, -60, -63, -66, -67, -67, -67, -65, -59, -51, -47, -41, -41, -42, -42, -47, -56, -56, -51, -46, -44, -40, -36, -35, -35, -34, -32, -31, -31, -29, -27, -24, -22, -19, -18, -15, -11, -7, -4, 1, 5, 9, 12, 15, 17, 21, 24, 27, 30, 31, 32, 26, 24, 29, 33, 35, 35, 37, 39, 40, 42, 43, 44, 42, 46, 33, 33, 35, 34, 32, 29, 28, 25, 23, 22, 18, 16, 15, 13, 11, 10, 8, 7, 5, 4, 3, 1, 0, -1, -2, -3, -4, -5, -6, -6, -6, -6, -6, -5, -5, -4, -4, -4,
+ /* 28.0 */ -5, -4, -0, -2, 1, -4, -5, -3, -2, -1, -0, 0, 1, 1, 0, -0, -1, -2, -2, -3, -3, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -14, -15, -16, -18, -19, -21, -22, -24, -25, -27, -28, -30, -31, -32, -34, -35, -36, -38, -39, -40, -42, -43, -44, -44, -44, -45, -45, -45, -45, -44, -44, -43, -43, -43, -37, -37, -35, -36, -34, -32, -29, -25, -24, -24, -23, -22, -21, -21, -23, -24, -26, -28, -28, -27, -28, -27, -26, -26, -25, -26, -27, -30, -31, -30, -26, -25, -26, -28, -30, -31, -34, -36, -38, -45, -45, -46, -48, -50, -52, -52, -51, -50, -48, -48, -47, -47, -47, -47, -46, -46, -44, -43, -41, -39, -36, -34, -31, -28, -25, -21, -18, -14, -10, -6, -2, 2, 4, 6, 8, 10, 11, 13, 15, 17, 19, 20, 21, 23, 25, 26, 26, 26, 27, 27, 27, 27, 27, 28, 30, 31, 34, 38, 45, 44, 41, 41, 39, 39, 39, 39, 39, 38, 36, 36, 36, 36, 34, 31, 30, 28, 28, 27, 27, 28, 28, 28, 28, 29, 29, 28, 28, 29, 29, 29, 30, 30, 30, 29, 26, 25, 23, 22, 21, 20, 17, 15, 15, 15, 15, 15, 14, 14, 13, 11, 13, 18, 17, 14, 12, 10, 8, 6, 3, -0, -3, -7, -11, -15, -19, -23, -26, -24, -21, -19, -19, -21, -19, -18, -20, -20, -21, -25, -30, -32, -32, -32, -38, -44, -42, -45, -48, -47, -47, -46, -47, -48, -53, -56, -60, -63, -63, -58, -55, -53, -45, -33, -29, -29, -29, -30, -31, -30, -34, -41, -48, -49, -42, -40, -37, -34, -32, -33, -35, -37, -37, -35, -31, -28, -25, -23, -20, -19, -16, -12, -9, -5, -1, 3, 7, 10, 13, 16, 20, 23, 26, 29, 31, 31, 29, 25, 26, 33, 35, 35, 37, 38, 40, 41, 42, 43, 40, 48, 32, 30, 32, 33, 30, 28, 24, 22, 21, 18, 17, 15, 13, 11, 9, 8, 6, 5, 4, 3, 1, 0, -1, -2, -3, -4, -5, -6, -7, -7, -7, -7, -6, -6, -5, -5, -5, -5,
+ /* 29.0 */ -5, -3, -5, -6, -5, -6, -4, -4, -3, -3, -3, -2, -2, -3, -3, -3, -4, -4, -4, -6, -7, -8, -9, -10, -10, -11, -12, -12, -13, -13, -15, -16, -17, -17, -19, -20, -22, -23, -25, -26, -27, -29, -30, -31, -33, -34, -35, -36, -38, -39, -41, -42, -43, -43, -44, -44, -44, -44, -44, -44, -43, -43, -42, -42, -41, -38, -35, -37, -35, -33, -31, -29, -25, -24, -25, -24, -23, -22, -22, -24, -24, -25, -27, -29, -28, -27, -27, -26, -25, -25, -25, -25, -29, -29, -27, -28, -28, -29, -29, -30, -32, -35, -37, -41, -46, -46, -47, -48, -51, -52, -52, -51, -49, -48, -47, -46, -45, -45, -44, -44, -43, -42, -40, -38, -37, -34, -32, -29, -26, -23, -19, -16, -12, -8, -4, -0, 4, 7, 9, 11, 13, 15, 16, 18, 20, 22, 23, 25, 26, 27, 28, 28, 27, 28, 29, 29, 29, 29, 30, 32, 32, 34, 39, 37, 37, 36, 42, 42, 41, 41, 42, 42, 40, 40, 40, 40, 40, 38, 36, 34, 31, 29, 28, 28, 28, 27, 27, 27, 27, 28, 29, 28, 29, 30, 31, 31, 30, 29, 29, 26, 25, 23, 22, 23, 21, 20, 18, 16, 15, 16, 16, 15, 16, 14, 13, 15, 20, 17, 14, 12, 10, 8, 5, 2, -0, -3, -7, -11, -15, -18, -21, -21, -15, -12, -13, -11, -8, -7, -11, -17, -17, -17, -22, -25, -27, -30, -30, -34, -42, -39, -45, -50, -49, -48, -47, -47, -49, -51, -55, -57, -55, -48, -40, -34, -31, -29, -30, -30, -31, -33, -34, -33, -32, -31, -30, -40, -44, -40, -37, -34, -32, -31, -32, -38, -43, -42, -39, -34, -30, -27, -24, -21, -20, -18, -13, -9, -6, -2, 2, 6, 8, 12, 15, 19, 22, 24, 27, 29, 30, 30, 26, 24, 29, 33, 36, 36, 38, 39, 40, 42, 43, 36, 37, 23, 30, 32, 30, 28, 25, 23, 21, 20, 17, 16, 13, 11, 10, 9, 7, 5, 4, 3, 2, 1, -1, -3, -3, -5, -5, -6, -6, -7, -7, -7, -7, -6, -6, -6, -6, -6, -5,
+ /* 30.0 */ -8, -8, -8, -8, -7, -8, -6, -6, -6, -5, -5, -6, -6, -6, -6, -6, -6, -7, -7, -8, -9, -10, -11, -11, -12, -12, -13, -13, -14, -15, -16, -17, -17, -18, -20, -21, -23, -24, -25, -27, -28, -29, -31, -32, -33, -34, -36, -37, -38, -39, -40, -41, -42, -42, -43, -43, -43, -43, -43, -43, -42, -42, -41, -40, -38, -35, -37, -35, -33, -31, -30, -28, -25, -25, -25, -24, -22, -23, -24, -24, -23, -24, -27, -28, -29, -29, -28, -28, -28, -28, -27, -28, -28, -28, -28, -29, -29, -29, -29, -30, -32, -36, -39, -41, -46, -46, -47, -49, -51, -52, -52, -51, -49, -47, -46, -45, -43, -42, -42, -41, -41, -40, -38, -36, -35, -33, -30, -28, -25, -21, -18, -14, -10, -6, -3, 1, 5, 9, 12, 14, 16, 18, 20, 22, 23, 25, 26, 28, 29, 30, 30, 33, 33, 30, 31, 30, 30, 31, 32, 33, 34, 35, 35, 37, 39, 40, 41, 44, 42, 40, 43, 47, 49, 48, 47, 46, 44, 41, 39, 38, 35, 33, 30, 29, 27, 26, 26, 26, 27, 27, 28, 29, 30, 31, 31, 30, 30, 29, 28, 27, 26, 24, 23, 22, 22, 21, 21, 18, 17, 17, 16, 16, 16, 17, 17, 17, 19, 17, 14, 12, 10, 7, 5, 2, -0, -4, -8, -13, -15, -17, -18, -13, -7, -8, -8, -6, -6, -7, -13, -16, -15, -19, -22, -23, -24, -27, -28, -28, -34, -33, -39, -49, -49, -47, -46, -46, -48, -50, -48, -39, -35, -29, -25, -26, -27, -28, -30, -30, -31, -33, -34, -35, -35, -34, -35, -38, -38, -36, -35, -34, -32, -31, -32, -41, -44, -42, -41, -38, -32, -27, -24, -22, -22, -19, -15, -11, -7, -3, 1, 4, 7, 10, 14, 17, 21, 23, 25, 28, 30, 31, 30, 26, 27, 32, 34, 36, 37, 39, 39, 42, 42, 35, 25, 23, 30, 30, 28, 26, 23, 21, 19, 17, 16, 14, 12, 11, 9, 8, 6, 4, 3, 2, -0, -1, -3, -4, -5, -6, -6, -7, -7, -7, -7, -7, -6, -7, -7, -7, -7, -5, -8,
+ /* 31.0 */ -8, -9, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -9, -9, -10, -11, -12, -13, -13, -13, -13, -14, -15, -15, -16, -18, -20, -21, -23, -24, -25, -26, -27, -28, -29, -30, -31, -32, -33, -35, -36, -37, -38, -39, -40, -41, -41, -42, -42, -42, -42, -42, -42, -42, -41, -41, -40, -38, -34, -35, -36, -34, -32, -30, -28, -27, -26, -26, -24, -24, -23, -24, -25, -24, -24, -25, -27, -27, -28, -28, -29, -28, -28, -28, -28, -29, -29, -29, -28, -29, -29, -29, -30, -31, -34, -36, -40, -43, -44, -44, -48, -51, -52, -52, -51, -50, -48, -46, -45, -43, -42, -40, -40, -39, -39, -38, -36, -35, -33, -31, -28, -26, -23, -19, -16, -12, -8, -5, -1, 3, 7, 11, 14, 18, 20, 22, 24, 25, 27, 28, 29, 30, 32, 32, 32, 34, 32, 32, 32, 31, 30, 32, 33, 35, 36, 37, 37, 38, 39, 41, 44, 44, 44, 43, 46, 51, 53, 54, 52, 50, 48, 46, 43, 42, 39, 37, 34, 32, 29, 27, 27, 27, 27, 28, 29, 31, 32, 31, 31, 30, 29, 28, 28, 27, 27, 26, 24, 23, 22, 21, 21, 19, 17, 15, 15, 16, 16, 17, 17, 18, 20, 18, 16, 14, 12, 9, 5, 2, -1, -6, -10, -14, -16, -16, -11, -5, -3, -4, -5, -5, -7, -9, -14, -14, -15, -19, -21, -22, -23, -25, -26, -25, -26, -31, -37, -48, -47, -45, -44, -46, -48, -44, -36, -24, -22, -24, -26, -28, -29, -30, -31, -31, -33, -34, -35, -36, -36, -37, -36, -37, -38, -37, -36, -34, -32, -31, -31, -33, -41, -43, -42, -39, -35, -29, -24, -23, -22, -20, -16, -12, -8, -4, -1, 3, 6, 9, 13, 16, 19, 22, 24, 27, 29, 30, 31, 29, 27, 30, 33, 36, 37, 38, 39, 42, 42, 35, 20, 24, 29, 28, 26, 24, 22, 20, 18, 16, 14, 13, 11, 10, 9, 7, 6, 4, 3, 1, -1, -3, -4, -5, -7, -7, -8, -8, -8, -8, -9, -8, -8, -8, -6, -8, -8, -9, -8,
+ /* 32.0 */ -9, -10, -9, -9, -10, -10, -9, -10, -10, -10, -10, -10, -10, -10, -10, -10, -9, -9, -10, -11, -11, -12, -13, -14, -14, -14, -14, -15, -16, -17, -18, -20, -21, -23, -24, -25, -26, -27, -28, -29, -30, -31, -32, -33, -34, -36, -37, -38, -39, -40, -40, -40, -41, -41, -42, -42, -42, -42, -42, -41, -41, -39, -38, -37, -33, -35, -34, -33, -31, -30, -28, -27, -26, -25, -24, -23, -26, -24, -26, -26, -27, -28, -28, -28, -27, -28, -27, -27, -27, -27, -27, -28, -29, -29, -28, -27, -28, -29, -31, -33, -34, -37, -39, -41, -43, -46, -50, -51, -51, -51, -50, -48, -47, -45, -43, -37, -40, -39, -37, -37, -37, -36, -35, -34, -31, -29, -26, -24, -21, -18, -14, -10, -7, -3, 1, 4, 8, 12, 16, 20, 23, 25, 27, 28, 30, 31, 33, 34, 35, 36, 36, 36, 38, 34, 34, 33, 33, 33, 34, 36, 38, 39, 40, 41, 40, 40, 42, 43, 43, 44, 46, 48, 49, 50, 55, 54, 51, 48, 47, 44, 41, 39, 38, 36, 32, 30, 28, 28, 29, 30, 32, 33, 32, 33, 32, 30, 29, 27, 27, 27, 29, 30, 27, 25, 22, 18, 14, 11, 11, 12, 16, 19, 17, 17, 16, 20, 21, 20, 19, 18, 15, 11, 7, 2, -2, -7, -10, -12, -14, -12, -4, -1, -1, -2, -3, -5, -6, -10, -12, -12, -14, -18, -21, -22, -24, -24, -25, -25, -26, -31, -40, -45, -43, -43, -44, -46, -46, -35, -28, -25, -24, -26, -28, -29, -30, -31, -32, -33, -35, -37, -37, -37, -37, -38, -38, -39, -39, -39, -37, -34, -34, -32, -32, -31, -35, -41, -41, -38, -34, -29, -26, -24, -24, -21, -17, -13, -9, -6, -2, 2, 5, 9, 12, 15, 18, 21, 24, 26, 29, 30, 32, 31, 26, 31, 33, 33, 36, 37, 39, 42, 42, 33, 16, 25, 29, 28, 26, 24, 22, 20, 17, 16, 13, 12, 11, 9, 8, 7, 6, 4, 1, -1, -3, -4, -6, -7, -8, -8, -9, -8, -8, -9, -8, -5, -9, -9, -9, -9, -9, -9, -9,
+ /* 33.0 */ -9, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -12, -13, -13, -14, -14, -15, -15, -15, -15, -16, -17, -18, -20, -21, -23, -24, -25, -26, -27, -28, -29, -29, -30, -32, -33, -34, -35, -36, -37, -38, -39, -39, -40, -41, -41, -41, -41, -42, -41, -41, -41, -40, -38, -38, -37, -33, -34, -34, -33, -32, -31, -29, -28, -26, -24, -24, -22, -22, -24, -22, -25, -27, -30, -30, -30, -28, -27, -28, -28, -27, -27, -27, -28, -29, -30, -30, -30, -30, -29, -29, -31, -33, -34, -36, -39, -40, -44, -48, -50, -51, -51, -50, -49, -47, -46, -44, -42, -40, -38, -38, -36, -35, -35, -34, -32, -31, -29, -27, -25, -22, -18, -16, -12, -9, -5, -1, 3, 6, 10, 14, 17, 21, 25, 28, 30, 32, 33, 34, 36, 37, 38, 39, 39, 40, 38, 38, 38, 37, 35, 35, 35, 36, 40, 43, 45, 48, 45, 43, 41, 42, 42, 41, 39, 46, 48, 51, 52, 55, 52, 52, 50, 48, 45, 42, 40, 39, 36, 32, 30, 29, 29, 31, 33, 33, 33, 32, 31, 30, 29, 28, 27, 27, 28, 28, 29, 23, 14, 10, 7, 7, 7, 9, 12, 14, 15, 16, 16, 20, 24, 24, 21, 19, 17, 13, 8, 3, -1, -4, -5, -3, -3, -0, 4, 3, 1, -1, -4, -5, -8, -10, -12, -12, -14, -19, -21, -21, -21, -23, -24, -23, -26, -29, -37, -45, -47, -47, -45, -40, -34, -27, -23, -24, -25, -27, -29, -30, -31, -32, -33, -34, -36, -37, -38, -38, -38, -39, -39, -40, -40, -40, -37, -36, -35, -34, -34, -33, -34, -38, -39, -36, -34, -31, -28, -26, -23, -21, -18, -15, -11, -6, -2, 1, 5, 8, 11, 15, 18, 21, 24, 26, 28, 31, 32, 33, 31, 34, 35, 34, 34, 36, 37, 41, 43, 34, 15, 24, 28, 27, 25, 23, 21, 18, 16, 14, 13, 10, 9, 7, 6, 5, 5, 3, 0, -2, -4, -6, -7, -8, -9, -9, -9, -9, -10, -10, -7, -9, -9, -9, -9, -9, -9, -9, -9,
+ /* 34.0 */ -10, -10, -9, -10, -10, -11, -12, -12, -12, -12, -13, -13, -12, -12, -12, -12, -12, -13, -13, -14, -14, -15, -15, -16, -16, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -29, -29, -31, -32, -32, -34, -35, -36, -37, -38, -39, -40, -40, -41, -41, -41, -41, -41, -41, -41, -41, -40, -39, -37, -37, -34, -32, -32, -33, -31, -30, -29, -26, -24, -23, -22, -23, -21, -23, -24, -24, -26, -28, -29, -30, -27, -27, -29, -30, -29, -28, -27, -28, -27, -28, -28, -29, -30, -30, -31, -31, -31, -32, -34, -36, -39, -40, -41, -47, -48, -48, -49, -48, -47, -46, -45, -43, -42, -40, -38, -37, -35, -34, -33, -32, -30, -29, -28, -25, -22, -20, -16, -13, -10, -6, -3, 1, 4, 8, 11, 15, 18, 22, 26, 29, 32, 35, 36, 38, 39, 40, 41, 41, 42, 42, 42, 42, 40, 38, 38, 38, 38, 38, 40, 42, 43, 44, 46, 45, 43, 42, 41, 40, 37, 38, 43, 45, 46, 48, 52, 51, 51, 50, 48, 46, 45, 42, 39, 34, 31, 29, 30, 32, 33, 34, 33, 33, 32, 32, 31, 29, 28, 26, 25, 23, 19, 13, 9, 9, 6, 1, 1, 5, 8, 10, 13, 14, 15, 18, 28, 26, 22, 20, 18, 14, 10, 6, 1, 0, 4, 5, 5, 6, 6, 4, -1, -3, -5, -7, -10, -11, -12, -14, -17, -20, -21, -20, -20, -21, -22, -22, -23, -28, -35, -42, -48, -44, -38, -32, -25, -25, -23, -24, -25, -26, -28, -30, -32, -34, -34, -36, -37, -38, -39, -39, -40, -41, -41, -41, -41, -40, -39, -38, -36, -36, -36, -36, -36, -38, -38, -36, -35, -33, -28, -25, -23, -21, -19, -15, -11, -7, -3, 1, 5, 8, 11, 14, 18, 21, 24, 26, 28, 30, 31, 32, 32, 34, 37, 37, 40, 36, 37, 40, 39, 25, 11, 23, 27, 25, 24, 21, 19, 17, 16, 14, 11, 9, 7, 5, 4, 4, 3, 2, -0, -2, -4, -6, -8, -8, -9, -10, -9, -10, -12, -12, -9, -11, -9, -8, -9, -9, -9, -8, -10,
+ /* 35.0 */ -10, -10, -10, -10, -10, -12, -12, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -14, -14, -14, -15, -15, -16, -16, -16, -17, -18, -19, -20, -21, -22, -23, -23, -24, -26, -27, -28, -29, -30, -32, -33, -33, -34, -35, -36, -38, -39, -39, -40, -40, -40, -41, -41, -41, -41, -41, -40, -39, -39, -36, -34, -33, -32, -32, -31, -30, -29, -27, -25, -24, -24, -23, -21, -22, -20, -22, -24, -25, -27, -28, -28, -27, -28, -27, -30, -32, -32, -30, -28, -28, -28, -29, -28, -29, -30, -31, -30, -31, -33, -32, -32, -35, -37, -39, -40, -43, -45, -47, -46, -46, -45, -45, -44, -42, -40, -39, -37, -36, -34, -33, -31, -30, -29, -27, -26, -23, -20, -18, -15, -11, -8, -4, -1, 2, 6, 9, 13, 16, 20, 23, 27, 30, 34, 37, 39, 41, 42, 43, 44, 45, 44, 45, 46, 44, 43, 43, 42, 41, 41, 40, 41, 42, 44, 47, 48, 46, 46, 48, 47, 44, 43, 41, 41, 40, 40, 44, 48, 50, 50, 50, 50, 49, 47, 44, 42, 37, 36, 37, 38, 37, 37, 36, 36, 36, 34, 34, 33, 29, 28, 26, 23, 17, 12, 9, 17, 20, 17, 10, 6, 6, 7, 7, 17, 28, 24, 19, 24, 26, 25, 22, 20, 17, 13, 10, 6, 6, 9, 11, 11, 9, 6, 1, -2, -5, -7, -9, -11, -12, -14, -16, -17, -21, -22, -23, -22, -22, -22, -23, -25, -29, -32, -35, -37, -35, -32, -28, -27, -23, -22, -22, -25, -26, -29, -32, -33, -35, -36, -37, -38, -39, -40, -41, -42, -43, -43, -42, -42, -42, -41, -40, -40, -39, -38, -38, -39, -39, -38, -36, -35, -34, -32, -27, -22, -21, -19, -16, -11, -7, -2, 2, 4, 7, 11, 14, 17, 20, 22, 25, 28, 29, 30, 31, 33, 35, 36, 36, 37, 37, 41, 39, 34, 23, 13, 20, 24, 23, 22, 21, 19, 17, 15, 12, 10, 8, 6, 5, 4, 3, 1, -1, -2, -3, -5, -6, -8, -9, -10, -10, -10, -10, -12, -9, -4, -13, -10, -10, -10, -10, -9, -10, -10,
+ /* 36.0 */ -11, -11, -11, -12, -12, -12, -13, -13, -13, -14, -14, -14, -14, -14, -13, -13, -13, -14, -14, -15, -15, -15, -16, -16, -17, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -29, -30, -31, -32, -33, -34, -35, -36, -37, -37, -39, -39, -39, -40, -40, -40, -40, -40, -40, -40, -39, -38, -36, -33, -34, -32, -29, -30, -29, -29, -27, -25, -23, -23, -21, -20, -21, -20, -19, -19, -21, -24, -27, -28, -29, -29, -28, -29, -30, -30, -29, -29, -29, -29, -29, -29, -29, -30, -30, -30, -32, -32, -32, -34, -33, -32, -36, -37, -40, -40, -43, -44, -44, -44, -43, -43, -42, -41, -39, -38, -37, -35, -33, -31, -30, -29, -27, -26, -23, -21, -18, -16, -11, -9, -5, -3, 0, 4, 7, 11, 14, 18, 22, 25, 28, 31, 34, 38, 41, 43, 46, 47, 47, 48, 48, 48, 49, 48, 48, 48, 47, 45, 44, 43, 41, 42, 43, 45, 47, 49, 46, 46, 47, 44, 43, 45, 45, 42, 42, 42, 46, 48, 48, 47, 47, 48, 48, 46, 44, 43, 43, 43, 43, 42, 40, 39, 39, 38, 37, 38, 31, 29, 29, 27, 21, 14, 11, 19, 28, 31, 29, 25, 16, 12, 15, 15, 21, 27, 25, 23, 25, 27, 26, 24, 22, 20, 16, 14, 13, 13, 15, 15, 12, 10, 5, 5, 1, -2, -4, -8, -10, -12, -13, -15, -18, -23, -27, -28, -29, -30, -30, -31, -32, -35, -29, -28, -30, -30, -31, -30, -26, -21, -24, -25, -30, -33, -33, -32, -34, -36, -37, -38, -39, -41, -42, -43, -44, -45, -46, -48, -47, -48, -47, -44, -46, -44, -43, -43, -42, -40, -37, -36, -34, -31, -29, -26, -22, -17, -17, -15, -12, -7, -2, 2, 4, 8, 10, 13, 16, 19, 22, 24, 27, 30, 28, 28, 30, 33, 33, 34, 36, 40, 42, 41, 38, 31, 19, 16, 22, 22, 22, 21, 19, 16, 14, 12, 10, 8, 6, 5, 3, 2, 2, 0, -2, -4, -5, -6, -7, -8, -9, -10, -10, -10, -12, -11, -11, -12, -11, -11, -11, -11, -10, -11, -11,
+ /* 37.0 */ -12, -12, -12, -13, -12, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -14, -14, -15, -15, -15, -16, -16, -17, -18, -18, -20, -20, -21, -22, -23, -24, -25, -26, -27, -29, -30, -31, -33, -34, -35, -36, -37, -37, -37, -38, -39, -39, -39, -40, -40, -40, -40, -39, -39, -38, -37, -33, -33, -32, -27, -27, -28, -27, -27, -26, -23, -23, -23, -22, -21, -21, -19, -17, -17, -20, -23, -26, -28, -28, -29, -29, -30, -30, -31, -30, -30, -30, -31, -30, -29, -30, -31, -32, -32, -31, -32, -32, -32, -33, -33, -34, -36, -39, -39, -42, -43, -43, -43, -42, -42, -42, -40, -39, -37, -35, -34, -32, -31, -28, -28, -25, -24, -22, -19, -16, -13, -10, -7, -4, -1, 2, 5, 9, 12, 16, 19, 23, 26, 29, 33, 36, 38, 42, 45, 47, 49, 51, 51, 51, 51, 52, 52, 52, 52, 49, 49, 49, 48, 47, 46, 46, 47, 47, 51, 52, 48, 46, 51, 49, 52, 52, 50, 47, 47, 48, 51, 50, 47, 46, 45, 44, 45, 45, 43, 43, 43, 43, 43, 42, 42, 42, 40, 38, 41, 31, 29, 28, 27, 23, 21, 25, 31, 36, 38, 37, 34, 30, 28, 29, 29, 33, 33, 32, 29, 30, 30, 27, 25, 23, 22, 19, 18, 19, 20, 17, 16, 12, 8, 5, -3, -7, -9, -10, -10, -10, -11, -14, -17, -23, -28, -31, -33, -35, -37, -38, -41, -44, -45, -39, -33, -30, -29, -29, -31, -28, -28, -34, -42, -48, -51, -51, -51, -46, -42, -39, -42, -42, -44, -46, -46, -50, -56, -58, -57, -55, -54, -50, -47, -46, -44, -43, -43, -44, -42, -40, -37, -34, -31, -30, -25, -21, -16, -16, -16, -12, -8, -3, 0, 4, 7, 10, 13, 16, 19, 21, 23, 26, 29, 27, 28, 29, 31, 32, 33, 35, 37, 40, 42, 43, 39, 28, 16, 18, 22, 22, 20, 18, 16, 14, 11, 10, 8, 6, 4, 2, 1, 1, -0, -2, -4, -5, -6, -7, -8, -9, -9, -10, -11, -13, -12, -13, -13, -12, -11, -11, -11, -11, -12, -12,
+ /* 38.0 */ -13, -12, -13, -13, -13, -13, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -14, -14, -15, -15, -16, -17, -17, -18, -19, -20, -21, -22, -22, -24, -25, -26, -27, -29, -30, -31, -33, -33, -35, -35, -36, -36, -37, -37, -38, -38, -39, -39, -39, -39, -39, -38, -37, -37, -33, -32, -31, -26, -24, -25, -25, -25, -24, -23, -21, -19, -21, -20, -19, -17, -15, -16, -17, -21, -23, -25, -26, -27, -27, -29, -30, -32, -32, -33, -32, -32, -31, -30, -30, -31, -32, -34, -35, -34, -34, -33, -32, -32, -33, -34, -35, -37, -37, -39, -42, -42, -41, -41, -41, -41, -40, -38, -36, -34, -32, -30, -28, -28, -27, -24, -22, -20, -18, -15, -11, -8, -5, -2, 1, 4, 7, 9, 13, 16, 20, 23, 27, 31, 34, 37, 39, 42, 45, 48, 51, 53, 54, 55, 56, 55, 55, 55, 55, 53, 52, 51, 50, 49, 48, 49, 47, 48, 49, 50, 48, 45, 44, 49, 53, 55, 55, 55, 52, 51, 51, 52, 50, 49, 47, 46, 45, 44, 44, 43, 42, 42, 43, 44, 43, 43, 44, 42, 42, 38, 31, 29, 25, 23, 25, 29, 36, 39, 39, 39, 38, 36, 36, 37, 37, 37, 36, 35, 36, 35, 34, 31, 28, 26, 23, 23, 24, 24, 20, 18, 16, 13, 5, -8, -12, -12, -13, -16, -17, -16, -15, -19, -26, -29, -31, -33, -35, -36, -38, -38, -39, -43, -44, -41, -33, -30, -28, -28, -30, -33, -46, -52, -53, -54, -54, -55, -56, -56, -56, -55, -49, -45, -44, -48, -54, -59, -60, -58, -53, -48, -47, -47, -45, -44, -45, -46, -49, -47, -45, -42, -39, -36, -32, -30, -25, -20, -17, -16, -15, -13, -9, -5, -1, 3, 7, 10, 13, 15, 18, 20, 23, 26, 26, 26, 27, 28, 29, 31, 31, 32, 36, 36, 38, 42, 41, 35, 24, 17, 21, 22, 21, 19, 16, 13, 12, 10, 8, 6, 4, 3, 1, -0, -2, -3, -4, -4, -5, -7, -9, -9, -10, -11, -12, -10, -8, -14, -13, -12, -11, -11, -11, -12, -13, -13,
+ /* 39.0 */ -13, -12, -13, -13, -13, -13, -13, -12, -12, -12, -12, -11, -11, -12, -12, -12, -12, -13, -13, -13, -14, -14, -15, -15, -16, -17, -17, -18, -19, -21, -22, -22, -23, -24, -26, -27, -28, -30, -31, -32, -33, -34, -34, -35, -35, -36, -36, -37, -37, -37, -37, -37, -37, -37, -36, -36, -34, -30, -30, -27, -24, -25, -24, -22, -22, -21, -21, -20, -18, -18, -20, -18, -17, -14, -14, -16, -20, -22, -24, -25, -26, -27, -28, -30, -32, -33, -33, -33, -33, -33, -32, -32, -32, -33, -35, -35, -35, -34, -35, -34, -32, -33, -34, -33, -35, -36, -37, -37, -39, -40, -39, -38, -38, -38, -37, -36, -33, -32, -31, -27, -27, -25, -24, -22, -19, -16, -13, -10, -7, -3, -0, 2, 5, 8, 11, 14, 17, 20, 24, 27, 30, 33, 36, 39, 43, 45, 49, 52, 54, 56, 57, 58, 58, 58, 57, 56, 55, 54, 52, 51, 51, 49, 49, 49, 48, 49, 50, 51, 49, 49, 53, 54, 55, 55, 54, 54, 54, 53, 53, 52, 50, 49, 49, 47, 46, 45, 44, 44, 45, 46, 44, 43, 43, 43, 43, 43, 44, 37, 30, 29, 27, 28, 33, 38, 40, 40, 40, 40, 39, 40, 40, 39, 37, 37, 36, 36, 36, 34, 31, 30, 29, 28, 27, 26, 24, 21, 18, 14, 11, -0, -12, -17, -17, -18, -21, -20, -19, -21, -24, -27, -29, -31, -33, -34, -36, -37, -38, -36, -35, -36, -36, -35, -33, -30, -30, -36, -47, -51, -52, -51, -51, -54, -57, -59, -60, -62, -63, -63, -63, -58, -55, -55, -56, -56, -52, -51, -49, -47, -46, -48, -52, -52, -52, -51, -48, -45, -42, -39, -36, -32, -28, -25, -19, -16, -14, -13, -12, -9, -5, -1, 2, 6, 10, 13, 15, 17, 20, 23, 24, 23, 25, 25, 26, 28, 30, 31, 31, 33, 35, 37, 39, 41, 38, 25, 15, 20, 22, 21, 20, 18, 16, 13, 11, 9, 7, 5, 4, 2, 0, -1, -3, -4, -5, -6, -7, -9, -9, -10, -11, -13, -15, -13, -14, -13, -12, -12, -12, -12, -13, -13, -13,
+ /* 40.0 */ -13, -13, -12, -13, -12, -12, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -12, -12, -13, -13, -13, -13, -14, -15, -16, -16, -17, -18, -20, -21, -22, -22, -24, -25, -26, -28, -28, -30, -30, -31, -32, -33, -34, -34, -35, -35, -36, -36, -36, -37, -37, -36, -36, -35, -34, -31, -28, -28, -23, -23, -23, -23, -21, -20, -19, -19, -19, -18, -16, -18, -17, -16, -13, -12, -17, -19, -21, -23, -24, -25, -26, -27, -28, -30, -32, -33, -33, -33, -33, -33, -33, -33, -34, -35, -34, -34, -34, -35, -35, -34, -33, -35, -35, -35, -34, -34, -35, -35, -35, -35, -34, -34, -34, -34, -34, -33, -31, -30, -29, -27, -25, -23, -21, -18, -15, -12, -9, -6, -2, 1, 4, 7, 10, 13, 16, 19, 23, 26, 29, 32, 35, 38, 41, 43, 46, 49, 52, 55, 57, 59, 59, 59, 60, 59, 58, 57, 56, 54, 54, 52, 51, 52, 51, 49, 48, 47, 46, 46, 46, 49, 54, 56, 55, 55, 54, 52, 52, 53, 52, 51, 50, 48, 49, 48, 45, 45, 44, 46, 48, 46, 44, 44, 44, 45, 46, 45, 38, 39, 34, 34, 36, 40, 40, 41, 40, 40, 40, 39, 38, 39, 39, 38, 37, 35, 34, 32, 30, 29, 30, 29, 29, 27, 26, 22, 20, 19, 11, 3, -8, -16, -21, -18, -15, -16, -15, -18, -21, -24, -26, -28, -30, -33, -34, -35, -36, -37, -38, -39, -41, -41, -42, -40, -39, -35, -35, -41, -45, -46, -50, -56, -60, -62, -62, -64, -66, -67, -67, -66, -66, -67, -66, -64, -63, -62, -59, -56, -55, -57, -57, -55, -54, -53, -50, -47, -45, -43, -40, -36, -32, -29, -25, -20, -16, -13, -11, -10, -8, -4, -1, 3, 5, 8, 11, 14, 17, 20, 24, 24, 23, 23, 24, 25, 26, 29, 30, 31, 31, 33, 34, 38, 40, 37, 24, 15, 17, 21, 21, 20, 18, 17, 15, 12, 10, 8, 6, 5, 3, 1, -0, -2, -3, -4, -6, -7, -8, -9, -10, -11, -13, -11, -15, -13, -12, -11, -12, -12, -13, -13, -12, -13,
+ /* 41.0 */ -12, -12, -12, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -12, -12, -12, -13, -14, -15, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30, -31, -31, -32, -33, -33, -33, -33, -33, -32, -32, -32, -32, -32, -33, -30, -25, -25, -23, -22, -21, -20, -19, -18, -17, -17, -17, -17, -14, -13, -14, -16, -12, -11, -15, -18, -20, -21, -22, -23, -24, -26, -27, -28, -30, -32, -32, -33, -33, -33, -33, -33, -34, -35, -34, -36, -35, -34, -34, -35, -33, -34, -34, -33, -34, -32, -31, -32, -32, -31, -31, -29, -28, -30, -31, -30, -29, -28, -27, -26, -24, -21, -19, -16, -13, -10, -7, -4, -1, 3, 7, 9, 12, 16, 19, 21, 24, 27, 30, 34, 37, 40, 42, 45, 47, 50, 53, 55, 58, 59, 61, 61, 60, 60, 59, 58, 57, 56, 56, 54, 52, 52, 51, 51, 50, 49, 48, 48, 48, 49, 55, 56, 56, 56, 55, 54, 54, 53, 51, 50, 50, 49, 48, 46, 46, 45, 45, 46, 48, 47, 46, 46, 47, 48, 48, 48, 46, 40, 35, 37, 43, 44, 43, 42, 41, 41, 39, 38, 37, 36, 36, 36, 35, 34, 31, 28, 26, 25, 24, 24, 24, 25, 26, 23, 18, 11, 5, 5, -6, -16, -16, -11, -12, -13, -14, -17, -21, -25, -27, -28, -30, -32, -33, -34, -36, -37, -40, -42, -44, -41, -45, -49, -44, -38, -34, -34, -33, -35, -44, -54, -59, -61, -63, -65, -66, -65, -64, -62, -62, -62, -64, -63, -61, -61, -60, -58, -56, -56, -56, -56, -55, -53, -50, -48, -46, -42, -40, -38, -33, -28, -24, -21, -17, -14, -11, -8, -7, -3, 1, 3, 5, 7, 10, 14, 18, 21, 24, 26, 27, 24, 23, 24, 25, 26, 27, 28, 30, 30, 32, 35, 36, 29, 17, 11, 10, 16, 19, 19, 18, 17, 16, 14, 12, 10, 7, 6, 4, 2, 1, -1, -3, -4, -5, -6, -7, -8, -9, -11, -12, -7, -8, -13, -11, -11, -12, -12, -12, -12, -12, -12,
+ /* 42.0 */ -11, -11, -11, -11, -11, -10, -10, -9, -9, -9, -9, -9, -9, -8, -8, -9, -9, -10, -10, -10, -10, -11, -11, -12, -13, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30, -30, -31, -31, -32, -32, -32, -31, -31, -31, -31, -30, -30, -30, -27, -24, -23, -21, -20, -19, -18, -17, -16, -15, -15, -15, -15, -14, -14, -14, -14, -13, -12, -14, -18, -19, -19, -21, -22, -24, -25, -25, -28, -29, -28, -32, -32, -33, -33, -34, -34, -34, -34, -34, -35, -36, -36, -35, -35, -33, -32, -33, -33, -31, -32, -30, -30, -29, -28, -28, -27, -26, -25, -27, -26, -26, -26, -26, -24, -23, -20, -17, -13, -10, -8, -6, -1, 4, 5, 9, 12, 15, 18, 21, 24, 26, 29, 32, 35, 38, 42, 44, 46, 48, 51, 53, 56, 58, 60, 62, 61, 61, 61, 60, 60, 59, 58, 57, 57, 55, 54, 54, 53, 51, 51, 50, 51, 52, 53, 56, 56, 57, 57, 54, 54, 54, 52, 50, 50, 50, 51, 50, 47, 47, 46, 46, 46, 51, 47, 48, 48, 49, 48, 46, 47, 44, 39, 37, 41, 45, 44, 45, 43, 41, 40, 40, 38, 34, 30, 28, 27, 28, 29, 27, 25, 22, 20, 19, 19, 18, 20, 20, 19, 14, 12, 9, -1, -8, -11, -12, -11, -12, -14, -17, -20, -23, -25, -27, -28, -29, -31, -33, -34, -35, -39, -41, -43, -43, -40, -36, -38, -37, -36, -35, -37, -38, -38, -38, -39, -44, -52, -56, -56, -57, -60, -63, -62, -64, -63, -62, -63, -63, -63, -61, -58, -56, -56, -56, -55, -54, -53, -50, -48, -46, -43, -40, -36, -33, -29, -26, -23, -19, -16, -11, -7, -5, -2, 0, 2, 4, 6, 8, 13, 18, 21, 23, 25, 26, 25, 23, 23, 24, 25, 26, 27, 28, 29, 30, 35, 33, 22, 21, 15, 11, 9, 10, 14, 16, 17, 16, 15, 13, 11, 9, 7, 5, 3, 2, -0, -1, -3, -4, -5, -6, -7, -8, -9, -12, -10, -11, -13, -11, -11, -11, -12, -12, -11, -11, -11,
+ /* 43.0 */ -10, -10, -9, -9, -9, -9, -8, -8, -7, -7, -7, -7, -7, -7, -7, -7, -8, -8, -8, -8, -9, -9, -10, -11, -11, -12, -12, -13, -14, -16, -17, -18, -19, -20, -21, -22, -22, -23, -24, -25, -26, -27, -28, -29, -30, -30, -30, -30, -31, -30, -30, -30, -29, -29, -29, -29, -24, -23, -21, -20, -19, -18, -18, -16, -16, -15, -14, -13, -12, -11, -10, -10, -14, -12, -14, -15, -15, -18, -19, -21, -24, -26, -27, -26, -27, -29, -29, -30, -31, -32, -34, -35, -35, -35, -34, -34, -34, -35, -36, -36, -37, -36, -35, -35, -34, -32, -32, -29, -28, -27, -27, -27, -26, -24, -25, -23, -22, -22, -21, -21, -20, -20, -18, -14, -10, -8, -7, -2, 4, 10, 13, 16, 17, 19, 20, 23, 26, 29, 31, 34, 37, 40, 43, 45, 47, 50, 52, 54, 56, 59, 61, 62, 62, 62, 62, 62, 62, 62, 61, 60, 58, 58, 58, 57, 56, 53, 51, 52, 55, 53, 54, 55, 57, 56, 56, 55, 54, 51, 50, 51, 52, 52, 51, 50, 50, 49, 48, 46, 46, 47, 49, 49, 48, 47, 43, 43, 43, 43, 43, 44, 46, 45, 44, 44, 42, 41, 40, 38, 36, 31, 29, 28, 26, 23, 21, 20, 19, 20, 18, 15, 17, 22, 23, 22, 17, 12, 5, -1, -6, -8, -9, -10, -12, -14, -17, -19, -20, -23, -25, -27, -28, -29, -32, -32, -34, -37, -39, -41, -42, -42, -40, -41, -41, -42, -44, -43, -42, -41, -42, -44, -47, -46, -48, -49, -51, -48, -49, -53, -62, -65, -63, -64, -64, -62, -57, -57, -60, -57, -56, -55, -53, -52, -50, -49, -46, -44, -43, -40, -38, -34, -31, -28, -25, -22, -18, -13, -8, -4, -2, -1, 1, 3, 5, 8, 11, 15, 19, 21, 22, 24, 25, 25, 26, 26, 27, 26, 26, 27, 28, 29, 32, 33, 30, 31, 28, 28, 21, 11, 3, 6, 12, 15, 14, 14, 12, 11, 9, 7, 5, 3, 1, 0, -2, -3, -5, -5, -6, -7, -8, -11, -8, -10, -11, -9, -10, -11, -11, -10, -10, -10, -10,
+ /* 44.0 */ -8, -8, -8, -7, -7, -6, -6, -6, -6, -6, -5, -5, -5, -5, -5, -5, -5, -6, -6, -6, -7, -7, -8, -9, -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -28, -29, -29, -29, -29, -29, -29, -28, -28, -28, -29, -28, -23, -22, -21, -19, -18, -18, -17, -17, -15, -13, -11, -11, -11, -9, -8, -10, -13, -10, -15, -15, -13, -17, -20, -23, -25, -25, -26, -26, -27, -28, -29, -29, -31, -33, -36, -37, -36, -36, -34, -34, -36, -35, -36, -36, -37, -37, -37, -36, -34, -31, -29, -29, -28, -27, -27, -26, -24, -24, -23, -23, -23, -21, -19, -18, -15, -13, -12, -11, -9, -7, -3, 3, 8, 12, 16, 17, 18, 20, 23, 25, 28, 30, 33, 35, 38, 40, 44, 46, 48, 51, 53, 55, 57, 59, 61, 63, 64, 64, 64, 64, 63, 63, 63, 61, 60, 58, 58, 58, 56, 55, 55, 53, 50, 47, 47, 51, 51, 49, 48, 50, 46, 47, 49, 49, 49, 49, 51, 52, 51, 50, 51, 52, 49, 46, 46, 45, 42, 41, 42, 43, 44, 46, 47, 46, 45, 44, 43, 40, 40, 39, 37, 36, 35, 33, 32, 29, 25, 22, 20, 17, 17, 15, 13, 16, 21, 20, 18, 14, 7, 2, -2, -5, -7, -9, -11, -12, -13, -15, -16, -18, -20, -23, -25, -27, -29, -30, -32, -34, -36, -37, -38, -39, -38, -39, -41, -42, -44, -44, -45, -45, -46, -47, -47, -49, -49, -51, -51, -52, -52, -56, -61, -66, -64, -60, -61, -60, -58, -59, -60, -62, -58, -56, -54, -53, -52, -51, -49, -47, -46, -44, -42, -40, -37, -35, -32, -28, -25, -22, -18, -14, -10, -6, -4, -2, 0, 2, 4, 7, 9, 13, 16, 19, 20, 22, 25, 25, 24, 25, 25, 27, 27, 26, 27, 28, 30, 31, 31, 32, 31, 31, 31, 30, 19, 2, -3, 2, 9, 11, 12, 11, 10, 8, 6, 4, 3, 2, -0, -1, -3, -4, -5, -5, -8, -11, -8, -11, -10, -9, -9, -10, -9, -9, -9, -8, -8,
+ /* 45.0 */ -6, -6, -6, -6, -5, -5, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -3, -3, -4, -4, -5, -6, -7, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -24, -25, -26, -26, -27, -27, -28, -28, -28, -27, -26, -27, -26, -27, -27, -27, -23, -22, -20, -20, -19, -17, -16, -15, -15, -14, -13, -11, -9, -9, -7, -12, -11, -14, -15, -15, -15, -17, -20, -22, -23, -24, -25, -25, -27, -27, -28, -28, -31, -31, -34, -36, -37, -37, -36, -35, -36, -37, -37, -37, -37, -36, -35, -34, -34, -32, -30, -30, -28, -27, -26, -26, -25, -24, -23, -22, -21, -20, -18, -17, -15, -13, -10, -7, -4, -2, 3, 6, 10, 14, 17, 19, 21, 23, 26, 28, 30, 32, 34, 37, 39, 42, 44, 46, 49, 51, 53, 55, 57, 60, 61, 63, 65, 65, 65, 65, 64, 64, 63, 62, 61, 59, 59, 59, 59, 57, 55, 56, 54, 53, 51, 48, 46, 46, 45, 45, 44, 47, 48, 47, 47, 49, 51, 53, 53, 51, 52, 53, 45, 42, 39, 41, 43, 43, 44, 46, 46, 46, 46, 45, 44, 43, 43, 42, 38, 37, 34, 32, 33, 32, 31, 29, 27, 26, 26, 22, 18, 16, 14, 13, 13, 13, 11, 8, 4, 1, -2, -4, -6, -9, -11, -12, -14, -16, -18, -20, -22, -24, -26, -28, -29, -30, -32, -33, -35, -37, -38, -38, -39, -41, -42, -43, -44, -44, -45, -47, -48, -50, -49, -45, -40, -44, -52, -56, -58, -63, -66, -67, -65, -61, -59, -57, -57, -57, -56, -53, -53, -51, -49, -49, -49, -49, -47, -47, -46, -44, -42, -40, -37, -34, -32, -29, -26, -22, -18, -15, -12, -8, -5, -2, 0, 2, 4, 6, 8, 11, 14, 16, 18, 20, 23, 24, 23, 24, 25, 29, 30, 26, 26, 27, 28, 29, 28, 28, 27, 26, 26, 26, 28, 24, 14, 1, -4, 3, 10, 12, 11, 10, 8, 6, 5, 3, 2, -0, -2, -3, -4, -5, -7, -10, -3, -10, -9, -8, -9, -7, -8, -7, -7, -7, -6,
+ /* 46.0 */ -5, -4, -4, -3, -3, -3, -2, -2, -2, -1, -1, -1, -0, -0, -1, -1, -0, -0, -1, -1, -2, -3, -4, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -20, -21, -22, -23, -24, -25, -25, -26, -26, -26, -26, -25, -25, -25, -25, -25, -26, -26, -23, -20, -20, -20, -20, -21, -18, -16, -16, -15, -13, -12, -12, -11, -11, -13, -14, -15, -16, -16, -16, -16, -19, -21, -22, -24, -25, -26, -27, -27, -27, -28, -28, -30, -31, -32, -34, -35, -36, -36, -37, -38, -38, -38, -37, -37, -36, -35, -34, -33, -33, -32, -29, -28, -26, -25, -25, -24, -22, -20, -19, -18, -17, -15, -13, -12, -9, -6, -2, 1, 4, 7, 10, 14, 18, 20, 24, 26, 29, 29, 31, 33, 35, 38, 40, 42, 45, 47, 49, 52, 53, 55, 57, 60, 61, 63, 65, 66, 66, 66, 65, 64, 63, 61, 61, 61, 60, 59, 59, 57, 55, 54, 52, 50, 49, 48, 47, 47, 47, 46, 48, 49, 48, 48, 48, 49, 50, 50, 50, 49, 49, 51, 52, 48, 49, 49, 48, 45, 47, 47, 46, 45, 45, 45, 44, 43, 42, 42, 41, 39, 37, 32, 31, 31, 29, 27, 25, 23, 22, 20, 17, 15, 13, 12, 11, 9, 7, 6, 3, 1, -1, -4, -6, -8, -10, -12, -15, -16, -18, -20, -22, -24, -26, -27, -29, -30, -31, -33, -35, -36, -37, -38, -39, -41, -41, -42, -43, -44, -44, -46, -48, -50, -51, -51, -51, -50, -52, -51, -51, -56, -60, -61, -60, -58, -54, -53, -51, -50, -49, -52, -50, -49, -49, -49, -48, -46, -45, -45, -44, -42, -41, -39, -36, -34, -32, -28, -25, -22, -19, -16, -13, -11, -7, -3, 0, 2, 4, 5, 7, 10, 12, 14, 17, 19, 20, 21, 22, 22, 24, 27, 29, 29, 26, 25, 26, 26, 26, 26, 24, 23, 23, 23, 23, 24, 25, 24, 17, 7, 4, 10, 12, 12, 10, 9, 7, 5, 3, 1, -1, -2, -3, -4, -7, -4, -5, -9, -7, -6, -6, -6, -6, -6, -5, -5, -5,
+ /* 47.0 */ -3, -3, -2, -1, -1, -1, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 0, -0, -1, -2, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -13, -14, -15, -16, -18, -19, -20, -21, -22, -22, -23, -24, -24, -24, -24, -23, -23, -23, -24, -24, -25, -24, -23, -21, -20, -18, -20, -20, -19, -17, -16, -15, -14, -13, -13, -12, -12, -12, -14, -15, -16, -16, -16, -17, -19, -21, -22, -24, -25, -26, -27, -28, -29, -30, -29, -31, -32, -33, -35, -36, -37, -37, -37, -37, -37, -37, -37, -37, -37, -36, -35, -34, -33, -31, -29, -28, -28, -26, -24, -22, -21, -20, -19, -18, -17, -15, -14, -11, -8, -4, -0, 3, 6, 8, 11, 15, 17, 21, 25, 28, 32, 35, 36, 35, 36, 38, 41, 44, 46, 48, 50, 52, 54, 56, 57, 60, 62, 63, 65, 66, 66, 66, 65, 64, 62, 62, 62, 61, 60, 59, 58, 57, 56, 55, 53, 50, 50, 50, 49, 48, 48, 50, 50, 49, 49, 48, 48, 48, 48, 48, 48, 48, 50, 49, 48, 48, 49, 50, 50, 49, 48, 48, 47, 45, 45, 44, 43, 42, 42, 41, 39, 39, 36, 33, 33, 31, 29, 28, 25, 24, 22, 21, 20, 18, 15, 14, 11, 9, 7, 5, 2, -1, -4, -6, -8, -11, -14, -15, -16, -18, -19, -20, -21, -22, -23, -25, -27, -29, -30, -32, -34, -35, -35, -36, -37, -39, -39, -41, -42, -43, -44, -45, -46, -47, -47, -48, -49, -49, -49, -48, -47, -47, -48, -53, -54, -51, -47, -43, -45, -47, -49, -49, -48, -47, -46, -45, -44, -43, -44, -44, -43, -42, -40, -38, -35, -33, -31, -28, -26, -23, -20, -17, -15, -12, -8, -4, -1, 2, 4, 5, 7, 9, 12, 13, 16, 18, 19, 20, 20, 21, 23, 25, 26, 28, 27, 25, 24, 24, 25, 25, 22, 21, 20, 21, 21, 21, 22, 23, 25, 24, 16, 4, 10, 12, 12, 10, 9, 7, 5, 3, 1, 0, -1, -3, -7, -3, -4, -6, -5, -4, -5, -5, -4, -4, -4, -3, -3,
+ /* 48.0 */ -1, -0, -0, 1, 1, 1, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 2, 1, 1, -0, -1, -2, -3, -4, -4, -5, -7, -8, -9, -10, -11, -12, -14, -15, -16, -17, -18, -19, -20, -21, -21, -22, -22, -22, -22, -22, -22, -22, -23, -23, -23, -20, -20, -22, -18, -18, -18, -17, -17, -16, -15, -15, -13, -14, -14, -15, -15, -16, -16, -17, -17, -18, -18, -18, -21, -22, -24, -25, -27, -27, -28, -29, -31, -32, -31, -33, -35, -35, -36, -37, -37, -37, -37, -38, -38, -38, -38, -38, -36, -35, -33, -33, -32, -30, -28, -28, -27, -24, -22, -21, -20, -19, -18, -17, -16, -14, -9, -4, -2, 2, 5, 8, 9, 13, 17, 21, 25, 27, 29, 32, 35, 36, 36, 37, 40, 42, 44, 46, 49, 51, 52, 54, 56, 58, 60, 62, 63, 65, 66, 65, 65, 64, 63, 63, 63, 62, 62, 61, 60, 58, 57, 56, 55, 54, 53, 52, 52, 53, 54, 52, 51, 51, 50, 49, 48, 47, 46, 46, 46, 46, 47, 48, 49, 49, 48, 47, 46, 45, 45, 45, 46, 46, 44, 44, 44, 43, 41, 40, 39, 38, 36, 34, 34, 33, 31, 30, 28, 25, 24, 22, 21, 20, 18, 16, 14, 12, 9, 7, 4, 1, -3, -5, -9, -12, -13, -14, -16, -17, -18, -19, -20, -22, -21, -20, -22, -24, -27, -29, -31, -33, -33, -33, -34, -35, -36, -38, -40, -41, -41, -42, -43, -43, -43, -43, -43, -45, -46, -47, -50, -51, -51, -51, -49, -46, -43, -42, -44, -48, -49, -49, -48, -47, -46, -44, -44, -44, -44, -44, -43, -43, -41, -40, -37, -34, -32, -30, -28, -26, -23, -21, -18, -16, -13, -9, -6, -2, 2, 3, 5, 7, 9, 11, 14, 16, 17, 18, 19, 19, 20, 21, 22, 23, 25, 26, 26, 24, 22, 24, 23, 22, 22, 20, 20, 20, 20, 20, 21, 21, 24, 25, 15, 2, 7, 10, 10, 9, 8, 6, 5, 3, 2, 1, -2, -4, -0, -6, -3, -2, -3, -2, -2, -2, -2, -2, -2, -1,
+ /* 49.0 */ 0, 1, 1, 2, 2, 3, 4, 4, 5, 6, 6, 6, 6, 7, 7, 7, 7, 6, 6, 5, 5, 5, 4, 3, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -11, -12, -13, -14, -16, -17, -18, -18, -19, -19, -20, -20, -20, -21, -21, -22, -21, -20, -17, -17, -21, -19, -17, -16, -16, -16, -16, -15, -15, -15, -14, -15, -15, -16, -16, -17, -17, -17, -18, -19, -19, -20, -21, -22, -23, -25, -27, -28, -29, -31, -32, -33, -34, -35, -36, -37, -38, -38, -39, -39, -38, -38, -39, -39, -39, -39, -38, -37, -36, -35, -34, -33, -30, -27, -27, -26, -24, -20, -19, -20, -20, -18, -16, -14, -10, -3, 2, 5, 7, 9, 12, 15, 22, 24, 22, 23, 26, 29, 33, 35, 37, 39, 41, 43, 45, 47, 50, 52, 53, 55, 56, 58, 60, 62, 64, 65, 65, 64, 64, 64, 63, 63, 63, 62, 61, 60, 59, 58, 57, 56, 56, 58, 58, 58, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 45, 45, 47, 47, 48, 48, 48, 48, 47, 46, 47, 47, 46, 46, 43, 43, 43, 43, 41, 39, 37, 33, 32, 34, 34, 33, 31, 28, 26, 23, 23, 21, 19, 17, 15, 13, 10, 10, 9, 7, 5, 1, -3, -5, -7, -9, -12, -14, -15, -16, -16, -16, -19, -21, -22, -20, -19, -22, -24, -27, -29, -31, -31, -31, -32, -33, -34, -35, -37, -38, -39, -40, -40, -40, -40, -40, -42, -44, -45, -45, -46, -47, -44, -44, -42, -41, -42, -43, -44, -46, -47, -46, -46, -45, -45, -45, -44, -43, -43, -42, -42, -41, -40, -39, -37, -34, -32, -30, -28, -25, -23, -21, -19, -16, -13, -10, -7, -3, 0, 3, 5, 7, 9, 11, 13, 14, 16, 16, 18, 19, 20, 20, 21, 21, 23, 24, 24, 23, 21, 22, 22, 21, 21, 20, 20, 20, 20, 21, 21, 21, 22, 25, 25, 12, 1, 4, 8, 9, 9, 8, 7, 5, 4, 2, -1, 1, 1, -2, 0, 0, -0, -0, 0, -0, 0, 0, 0, 0,
+ /* 50.0 */ -6, -6, -5, -4, -2, -1, 1, 2, 3, 5, 5, 7, 7, 8, 8, 9, 9, 8, 8, 8, 7, 7, 7, 6, 5, 5, 4, 3, 2, 1, -0, -1, -2, -3, -4, -5, -7, -8, -9, -10, -12, -13, -14, -15, -16, -17, -17, -17, -18, -18, -18, -20, -20, -16, -15, -17, -17, -17, -17, -16, -16, -16, -16, -16, -15, -14, -16, -17, -18, -17, -17, -17, -17, -19, -19, -19, -20, -20, -21, -23, -24, -25, -27, -28, -29, -30, -31, -33, -34, -35, -35, -36, -38, -39, -39, -40, -40, -39, -39, -39, -40, -40, -40, -39, -38, -36, -35, -33, -31, -29, -26, -25, -24, -24, -23, -23, -21, -19, -18, -16, -13, -10, -5, 1, 4, 8, 11, 13, 16, 22, 24, 23, 23, 26, 29, 32, 35, 38, 40, 42, 45, 47, 49, 51, 53, 54, 56, 57, 59, 61, 62, 63, 64, 64, 64, 63, 63, 63, 63, 63, 62, 61, 60, 58, 58, 57, 56, 57, 57, 59, 58, 58, 56, 55, 54, 53, 52, 50, 48, 46, 45, 45, 45, 45, 46, 47, 48, 49, 48, 48, 48, 47, 47, 47, 46, 45, 44, 44, 43, 42, 40, 37, 35, 33, 31, 32, 32, 32, 31, 29, 27, 25, 23, 21, 19, 16, 14, 12, 11, 11, 11, 10, 8, 5, 3, 0, -5, -7, -8, -10, -12, -14, -15, -15, -16, -17, -20, -21, -18, -17, -19, -22, -24, -26, -28, -29, -29, -30, -31, -32, -33, -34, -35, -35, -36, -38, -39, -40, -42, -44, -45, -45, -45, -44, -43, -43, -41, -41, -40, -41, -42, -42, -45, -46, -46, -46, -45, -43, -43, -42, -42, -41, -41, -40, -40, -40, -39, -37, -34, -32, -30, -27, -25, -23, -21, -19, -16, -14, -11, -8, -5, -1, 3, 5, 7, 9, 11, 12, 12, 13, 15, 17, 19, 20, 21, 21, 20, 21, 22, 23, 22, 21, 21, 22, 21, 19, 19, 19, 19, 20, 20, 21, 21, 22, 22, 24, 24, 16, 5, 2, 6, 8, 8, 8, 7, 5, 4, 3, 4, 1, 3, 2, 2, 1, 1, 1, 1, -1, -3, -5, -6,
+ /* 51.0 */ -8, -6, -7, -8, -10, -11, -11, -10, -7, -5, -2, 2, 5, 8, 9, 10, 10, 10, 10, 10, 10, 10, 9, 8, 7, 7, 6, 5, 4, 3, 3, 2, 1, -0, -1, -3, -3, -5, -6, -8, -9, -10, -11, -13, -14, -14, -15, -15, -16, -17, -17, -16, -15, -15, -15, -15, -14, -14, -15, -15, -16, -16, -16, -16, -14, -13, -17, -18, -19, -19, -19, -20, -20, -21, -21, -21, -21, -22, -23, -25, -27, -28, -30, -31, -31, -32, -33, -34, -35, -36, -37, -38, -39, -40, -40, -40, -41, -42, -41, -41, -42, -42, -41, -39, -37, -36, -34, -33, -32, -29, -26, -24, -22, -21, -20, -19, -18, -17, -15, -13, -10, -8, -5, -2, 3, 9, 11, 14, 16, 20, 24, 24, 25, 27, 31, 34, 36, 39, 41, 43, 45, 48, 50, 52, 53, 55, 57, 58, 59, 61, 62, 63, 63, 63, 63, 63, 63, 63, 63, 62, 62, 60, 59, 58, 57, 59, 60, 58, 59, 60, 59, 58, 56, 55, 54, 54, 53, 51, 48, 46, 45, 45, 44, 45, 45, 45, 46, 47, 48, 48, 47, 46, 46, 44, 44, 43, 42, 41, 39, 38, 37, 36, 34, 31, 30, 30, 30, 30, 28, 25, 25, 25, 23, 20, 18, 16, 14, 13, 12, 11, 10, 9, 7, 6, 5, 3, -1, -4, -6, -8, -10, -11, -13, -14, -15, -17, -18, -18, -16, -16, -18, -20, -23, -24, -26, -27, -27, -28, -29, -30, -31, -32, -33, -35, -36, -38, -39, -40, -41, -42, -43, -43, -42, -42, -41, -41, -41, -40, -40, -40, -41, -42, -43, -43, -43, -43, -43, -43, -42, -40, -40, -39, -38, -38, -38, -38, -39, -37, -34, -32, -29, -27, -25, -23, -21, -19, -16, -14, -11, -8, -5, -2, 2, 4, 6, 8, 9, 10, 11, 12, 14, 16, 17, 18, 20, 20, 20, 19, 20, 21, 21, 20, 19, 20, 18, 17, 17, 18, 18, 18, 19, 19, 20, 22, 23, 23, 25, 25, 20, 6, 1, 5, 7, 8, 8, 8, 6, 6, 6, 5, 4, 3, 1, -1, -4, -5, -9, -10, -8, -5, -8,
+ /* 52.0 */ 4, 2, 4, 5, 7, 8, 7, 6, 6, 3, 2, -2, -3, -0, 2, 6, 8, 10, 11, 11, 11, 11, 11, 10, 10, 9, 9, 8, 7, 7, 6, 5, 4, 2, 1, 0, -1, -2, -4, -5, -7, -8, -9, -10, -11, -12, -12, -13, -14, -13, -14, -14, -14, -14, -13, -12, -13, -14, -14, -14, -15, -15, -15, -13, -12, -15, -18, -19, -20, -20, -20, -20, -21, -22, -22, -22, -23, -24, -24, -27, -30, -31, -32, -33, -33, -33, -34, -35, -36, -37, -39, -41, -42, -43, -43, -42, -43, -43, -43, -43, -44, -43, -42, -40, -39, -36, -34, -33, -31, -30, -28, -26, -23, -20, -18, -17, -16, -15, -13, -10, -8, -5, -1, 2, 4, 9, 12, 15, 17, 21, 22, 24, 26, 29, 32, 34, 36, 39, 42, 45, 47, 49, 50, 52, 54, 56, 57, 58, 60, 61, 61, 62, 62, 62, 62, 62, 62, 62, 62, 61, 61, 59, 58, 57, 58, 61, 61, 60, 60, 59, 58, 58, 56, 56, 55, 54, 54, 52, 49, 48, 46, 45, 45, 44, 44, 43, 44, 44, 45, 45, 44, 44, 43, 42, 41, 40, 39, 37, 35, 33, 33, 32, 30, 29, 28, 28, 27, 26, 24, 21, 22, 23, 21, 20, 18, 16, 14, 13, 12, 11, 10, 8, 7, 7, 6, 4, 2, -0, -1, -3, -4, -6, -7, -8, -9, -12, -14, -14, -13, -13, -16, -18, -21, -23, -25, -25, -25, -26, -27, -28, -29, -30, -31, -33, -34, -36, -37, -39, -40, -41, -41, -41, -42, -43, -44, -43, -43, -42, -41, -39, -39, -40, -41, -42, -43, -41, -40, -40, -39, -38, -37, -37, -38, -38, -39, -40, -39, -36, -34, -32, -30, -27, -25, -23, -21, -19, -16, -14, -12, -9, -7, -4, -0, 2, 4, 6, 7, 8, 9, 11, 12, 14, 16, 18, 19, 19, 18, 18, 19, 20, 20, 19, 19, 18, 18, 16, 16, 17, 18, 19, 19, 20, 20, 21, 22, 23, 24, 24, 24, 12, 2, -1, 3, 7, 8, 9, 9, 8, 6, 3, 1, -3, -6, -2, 1, 5, 6, 4, 6, 6, 4,
+ /* 53.0 */ 5, 2, 2, 2, 3, 3, 5, 6, 8, 10, 13, 14, 14, 10, 4, 0, 0, 2, 4, 7, 9, 10, 11, 11, 12, 11, 11, 10, 9, 8, 7, 6, 6, 5, 3, 2, 1, -0, -2, -3, -5, -6, -7, -8, -9, -9, -11, -12, -9, -11, -12, -12, -13, -12, -11, -12, -12, -13, -13, -14, -14, -15, -14, -15, -16, -18, -20, -21, -22, -22, -22, -22, -22, -23, -24, -24, -25, -26, -27, -28, -30, -32, -33, -34, -34, -35, -36, -38, -39, -40, -41, -42, -43, -44, -45, -45, -45, -45, -45, -45, -45, -44, -43, -41, -39, -37, -34, -32, -30, -29, -27, -25, -23, -22, -19, -18, -16, -15, -14, -10, -7, -3, -0, 4, 7, 10, 13, 15, 19, 21, 23, 25, 28, 31, 34, 36, 39, 41, 44, 45, 47, 50, 51, 54, 56, 58, 59, 59, 60, 60, 60, 60, 61, 61, 61, 61, 61, 60, 60, 60, 60, 60, 60, 59, 59, 60, 61, 60, 61, 60, 59, 58, 57, 56, 56, 55, 55, 53, 51, 49, 46, 45, 44, 43, 42, 42, 42, 41, 41, 41, 41, 41, 40, 39, 37, 36, 34, 33, 31, 30, 31, 30, 29, 28, 28, 27, 26, 24, 22, 20, 19, 19, 18, 17, 17, 16, 14, 12, 11, 10, 9, 8, 8, 7, 5, 5, 4, 3, 1, 0, -1, -2, -3, -4, -6, -9, -11, -12, -11, -12, -15, -17, -19, -20, -23, -24, -24, -25, -26, -27, -28, -29, -30, -32, -33, -35, -37, -38, -39, -39, -40, -40, -40, -41, -41, -42, -41, -40, -39, -39, -40, -41, -41, -40, -40, -40, -39, -38, -37, -36, -36, -37, -38, -38, -37, -36, -35, -35, -34, -31, -29, -27, -25, -23, -20, -19, -17, -15, -12, -10, -8, -6, -4, -2, 0, 2, 5, 6, 8, 9, 11, 13, 15, 17, 18, 18, 17, 18, 18, 18, 19, 19, 18, 18, 17, 16, 16, 17, 18, 18, 18, 19, 20, 21, 21, 23, 23, 24, 24, 21, 17, 5, -3, 1, 8, 10, 9, 5, 1, -3, -0, 3, 5, 7, 5, 2, 2, 1, 1, 2, 5,
+ /* 54.0 */ 5, -0, 2, 3, 4, 4, 5, 6, 7, 8, 10, 11, 13, 15, 18, 18, 16, 13, 8, 7, 8, 8, 8, 8, 9, 10, 11, 11, 11, 10, 11, 10, 9, 7, 5, 4, 3, 1, 0, -1, -2, -3, -4, -5, -6, -8, -9, -6, -8, -9, -9, -10, -10, -10, -11, -12, -12, -13, -14, -14, -14, -15, -15, -16, -18, -19, -20, -22, -23, -23, -24, -25, -25, -26, -26, -26, -27, -29, -30, -30, -31, -32, -34, -36, -37, -38, -39, -39, -40, -42, -43, -44, -45, -46, -46, -46, -45, -45, -45, -44, -44, -43, -42, -41, -39, -37, -35, -32, -31, -29, -27, -24, -23, -21, -20, -18, -18, -16, -15, -13, -9, -5, -1, 2, 6, 11, 14, 16, 18, 21, 24, 27, 30, 32, 35, 38, 40, 42, 44, 47, 49, 51, 53, 55, 58, 59, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 60, 60, 60, 61, 61, 61, 60, 59, 58, 58, 58, 59, 59, 59, 58, 58, 57, 56, 55, 54, 53, 51, 48, 46, 44, 43, 41, 41, 41, 40, 40, 39, 39, 40, 39, 39, 37, 36, 35, 34, 32, 30, 29, 29, 29, 28, 28, 27, 26, 25, 24, 23, 21, 20, 18, 17, 17, 16, 16, 15, 13, 11, 10, 9, 9, 8, 7, 7, 6, 5, 4, 3, 2, 0, 0, -1, -3, -5, -8, -10, -11, -10, -10, -12, -14, -17, -18, -20, -22, -23, -24, -26, -27, -27, -28, -30, -31, -33, -34, -36, -37, -38, -38, -39, -39, -39, -39, -40, -39, -39, -40, -38, -36, -37, -39, -40, -39, -39, -38, -37, -36, -36, -37, -39, -40, -39, -38, -36, -34, -34, -33, -32, -33, -31, -27, -24, -22, -21, -19, -17, -15, -13, -11, -9, -8, -6, -4, -2, 1, 4, 5, 7, 8, 10, 12, 13, 14, 16, 17, 16, 16, 17, 17, 18, 17, 16, 17, 17, 15, 16, 17, 18, 18, 19, 19, 20, 20, 20, 22, 22, 24, 25, 24, 22, 14, 5, -1, 4, 6, 2, 0, 2, 4, 4, 3, 2, 2, 2, 3, 3, 2, 2, 4, 5,
+ /* 55.0 */ -1, 1, 2, 3, 4, 5, 5, 6, 6, 7, 9, 10, 12, 14, 14, 16, 17, 17, 17, 18, 17, 16, 14, 13, 12, 10, 9, 10, 12, 12, 11, 9, 8, 7, 7, 6, 5, 3, 2, 1, 0, -1, -2, -3, -5, -7, -4, -4, -5, -6, -7, -8, -8, -9, -9, -10, -11, -12, -12, -14, -15, -16, -17, -17, -18, -19, -20, -22, -23, -24, -25, -26, -27, -28, -28, -29, -29, -31, -31, -32, -33, -34, -35, -37, -39, -40, -41, -42, -42, -43, -45, -46, -46, -47, -47, -46, -45, -45, -45, -44, -44, -44, -43, -41, -39, -37, -35, -33, -31, -29, -26, -24, -23, -20, -17, -16, -15, -13, -12, -11, -8, -4, -1, 3, 8, 13, 15, 16, 18, 22, 25, 28, 31, 34, 37, 39, 41, 43, 45, 47, 50, 52, 54, 56, 58, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 60, 60, 60, 61, 62, 62, 60, 58, 58, 57, 56, 56, 56, 58, 58, 58, 57, 56, 55, 54, 53, 51, 48, 46, 44, 43, 42, 42, 41, 41, 40, 41, 40, 40, 39, 37, 36, 34, 34, 33, 31, 29, 28, 27, 26, 25, 25, 25, 24, 23, 22, 21, 20, 19, 19, 17, 17, 16, 16, 15, 15, 14, 12, 11, 10, 9, 7, 6, 6, 6, 5, 4, 3, 2, 1, -0, -2, -4, -6, -8, -10, -9, -9, -10, -12, -14, -17, -18, -20, -22, -23, -24, -25, -26, -27, -29, -30, -32, -33, -34, -35, -35, -36, -36, -36, -36, -37, -37, -37, -38, -37, -35, -36, -38, -38, -38, -38, -37, -38, -38, -38, -38, -40, -40, -40, -39, -37, -35, -34, -33, -32, -32, -32, -30, -26, -25, -23, -20, -18, -17, -15, -13, -11, -9, -8, -6, -4, -2, 0, 2, 4, 5, 7, 9, 12, 13, 14, 14, 15, 15, 15, 16, 16, 16, 15, 16, 16, 16, 16, 17, 18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 24, 25, 23, 22, 20, 14, 1, -1, 1, 8, 14, 9, 7, 5, 2, 2, 2, -0, -2, 1, 4, 4, 2, -1,
+ /* 56.0 */ 2, 2, 3, 3, 3, 3, 3, 4, 5, 8, 10, 12, 13, 13, 14, 14, 15, 15, 15, 16, 17, 16, 14, 13, 12, 13, 14, 11, 7, 6, 7, 8, 9, 9, 8, 8, 6, 6, 5, 3, 2, 1, -1, -2, -4, -1, -0, -1, -2, -2, -3, -6, -7, -7, -8, -8, -10, -11, -13, -14, -15, -16, -17, -18, -19, -20, -21, -23, -24, -25, -27, -28, -29, -29, -29, -30, -31, -31, -32, -33, -34, -35, -37, -38, -40, -41, -42, -43, -44, -45, -46, -48, -47, -48, -48, -48, -47, -47, -46, -45, -44, -44, -43, -41, -39, -37, -35, -33, -31, -29, -27, -26, -25, -21, -17, -15, -13, -11, -10, -9, -6, -0, 5, 6, 8, 11, 14, 17, 20, 23, 26, 28, 31, 34, 37, 39, 41, 43, 45, 47, 49, 52, 54, 56, 58, 60, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 62, 63, 63, 61, 61, 61, 61, 62, 62, 60, 58, 57, 55, 56, 57, 58, 58, 57, 56, 55, 54, 52, 50, 48, 47, 45, 45, 44, 43, 42, 42, 41, 41, 40, 39, 38, 37, 36, 35, 33, 32, 30, 28, 26, 25, 25, 24, 23, 23, 22, 21, 21, 20, 19, 19, 17, 17, 17, 17, 16, 15, 15, 14, 13, 12, 10, 9, 8, 8, 7, 6, 6, 5, 4, 3, 1, -1, -2, -5, -6, -7, -7, -7, -8, -8, -10, -13, -16, -18, -19, -20, -22, -23, -24, -25, -27, -28, -30, -31, -31, -32, -34, -34, -35, -35, -35, -35, -36, -36, -36, -36, -36, -37, -38, -38, -38, -38, -39, -39, -39, -40, -41, -41, -41, -40, -39, -38, -37, -36, -34, -34, -33, -32, -29, -28, -27, -26, -24, -22, -20, -18, -15, -11, -10, -9, -8, -7, -4, -2, -0, 2, 4, 6, 8, 10, 11, 12, 13, 13, 14, 15, 15, 15, 15, 14, 14, 15, 15, 16, 17, 18, 18, 18, 19, 19, 19, 18, 18, 18, 20, 21, 22, 24, 23, 21, 19, 15, 11, 7, 8, 9, 8, 8, 7, 6, 4, 2, 3, 1, 1, -0, -0, -0, 1, 2,
+ /* 57.0 */ 2, 2, 2, 3, 3, 2, 5, 10, 11, 11, 12, 12, 12, 13, 13, 14, 15, 15, 15, 15, 14, 15, 16, 15, 12, 12, 13, 14, 15, 14, 11, 8, 7, 8, 8, 8, 7, 6, 5, 4, 3, 1, 0, -1, 1, 2, 1, 1, 1, 1, -2, -3, -4, -5, -6, -8, -8, -10, -12, -13, -14, -15, -17, -19, -20, -22, -22, -23, -25, -26, -28, -29, -29, -30, -30, -31, -32, -33, -34, -35, -36, -38, -39, -41, -42, -43, -45, -46, -47, -47, -48, -48, -49, -49, -48, -48, -48, -48, -47, -45, -44, -44, -42, -41, -39, -37, -35, -33, -31, -29, -28, -27, -23, -20, -16, -13, -11, -10, -9, -7, -1, 4, 6, 8, 11, 13, 16, 18, 21, 24, 27, 29, 32, 34, 37, 39, 42, 44, 46, 47, 49, 51, 53, 55, 57, 60, 61, 62, 62, 62, 62, 61, 61, 61, 61, 61, 61, 61, 62, 62, 61, 60, 60, 60, 60, 60, 60, 57, 55, 56, 56, 58, 58, 57, 56, 55, 54, 52, 50, 48, 47, 46, 46, 44, 43, 43, 42, 41, 40, 39, 38, 38, 37, 36, 34, 32, 30, 28, 27, 25, 23, 22, 22, 21, 20, 21, 21, 20, 19, 19, 18, 16, 16, 17, 16, 14, 13, 13, 13, 13, 12, 11, 9, 9, 8, 9, 8, 7, 6, 5, 4, 2, 0, -1, -3, -5, -5, -5, -6, -6, -7, -10, -12, -14, -16, -18, -19, -21, -22, -23, -25, -26, -28, -29, -29, -30, -31, -32, -33, -34, -34, -34, -35, -35, -36, -36, -36, -37, -38, -38, -38, -39, -39, -39, -39, -40, -41, -40, -40, -40, -39, -38, -37, -36, -35, -35, -34, -34, -33, -30, -27, -24, -24, -23, -21, -19, -17, -15, -13, -12, -10, -10, -8, -5, -4, -2, 1, 4, 6, 7, 9, 10, 11, 11, 12, 12, 14, 15, 15, 15, 14, 14, 14, 15, 15, 16, 17, 17, 18, 18, 18, 17, 17, 16, 17, 18, 19, 20, 21, 21, 20, 19, 18, 15, 11, 10, 10, 9, 8, 7, 6, 5, 3, 2, 2, 2, 1, 1, 1, 2, 2,
+ /* 58.0 */ 2, 1, 1, 2, 4, 4, 7, 9, 9, 10, 11, 11, 12, 12, 13, 14, 14, 14, 15, 15, 15, 15, 15, 15, 16, 15, 13, 13, 12, 13, 14, 13, 10, 6, 6, 7, 7, 7, 5, 4, 3, 3, 2, 3, 4, 3, 2, 3, 2, 1, -0, -1, -2, -4, -5, -6, -9, -12, -13, -15, -15, -17, -19, -20, -21, -23, -24, -24, -26, -28, -29, -30, -31, -32, -32, -33, -34, -35, -36, -37, -38, -40, -41, -43, -44, -45, -46, -47, -48, -48, -48, -49, -49, -48, -48, -48, -47, -47, -46, -45, -44, -42, -41, -38, -37, -35, -33, -32, -30, -28, -28, -26, -22, -19, -16, -12, -9, -8, -7, -3, 3, 5, 6, 9, 11, 14, 17, 19, 22, 25, 27, 30, 32, 35, 38, 40, 42, 43, 45, 47, 49, 51, 52, 54, 56, 58, 60, 62, 63, 63, 63, 63, 63, 62, 62, 61, 61, 61, 61, 61, 61, 61, 61, 60, 60, 60, 60, 57, 56, 56, 56, 58, 57, 57, 56, 55, 53, 50, 49, 49, 48, 47, 46, 45, 44, 43, 42, 42, 41, 39, 38, 37, 36, 34, 33, 31, 29, 27, 25, 22, 21, 20, 20, 20, 19, 19, 20, 19, 18, 17, 16, 15, 16, 15, 15, 15, 14, 14, 14, 13, 12, 11, 11, 10, 9, 9, 9, 8, 7, 6, 5, 4, 2, 1, -1, -2, -3, -3, -4, -5, -5, -8, -11, -13, -15, -16, -18, -20, -21, -22, -24, -25, -26, -27, -28, -29, -30, -30, -32, -33, -33, -34, -34, -35, -36, -36, -35, -35, -36, -37, -37, -38, -38, -37, -36, -38, -39, -40, -40, -40, -39, -37, -36, -35, -34, -34, -34, -33, -33, -32, -29, -27, -24, -22, -20, -19, -17, -16, -16, -14, -13, -11, -9, -7, -5, -2, 1, 2, 4, 6, 7, 8, 10, 10, 10, 11, 11, 12, 14, 15, 14, 13, 13, 13, 13, 14, 15, 15, 16, 16, 17, 17, 16, 16, 17, 16, 17, 19, 19, 18, 18, 19, 17, 15, 13, 10, 10, 9, 7, 6, 7, 6, 3, 2, 2, 1, 1, 1, 1, 1, 2,
+ /* 59.0 */ 1, 1, 4, 6, 6, 7, 8, 8, 9, 9, 10, 11, 11, 12, 12, 13, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 14, 12, 11, 10, 11, 13, 12, 11, 8, 7, 6, 6, 7, 8, 7, 5, 7, 9, 6, 5, 5, 3, 2, 2, 0, -1, -3, -4, -5, -8, -11, -12, -13, -15, -17, -18, -19, -20, -20, -21, -24, -27, -29, -30, -31, -32, -33, -33, -34, -35, -35, -36, -38, -40, -41, -42, -43, -45, -46, -48, -49, -49, -49, -49, -48, -48, -48, -48, -48, -47, -46, -46, -45, -44, -44, -42, -39, -36, -34, -33, -31, -29, -28, -27, -26, -24, -21, -18, -15, -11, -7, -5, -1, 3, 5, 5, 7, 10, 13, 15, 18, 21, 23, 25, 28, 31, 34, 36, 38, 40, 43, 45, 46, 47, 49, 50, 52, 53, 55, 57, 59, 61, 62, 63, 64, 64, 63, 63, 63, 62, 62, 61, 61, 61, 60, 61, 61, 60, 59, 59, 58, 56, 56, 55, 56, 55, 55, 57, 56, 55, 54, 52, 51, 48, 47, 47, 46, 45, 44, 44, 44, 45, 44, 42, 40, 38, 35, 33, 31, 29, 28, 26, 24, 21, 19, 18, 19, 20, 20, 19, 18, 17, 17, 16, 15, 15, 15, 16, 17, 16, 15, 14, 14, 14, 13, 13, 13, 11, 10, 9, 9, 8, 7, 7, 6, 5, 4, 2, 1, 0, -1, -2, -3, -3, -5, -9, -10, -12, -14, -15, -17, -18, -20, -21, -22, -24, -25, -27, -28, -28, -29, -30, -31, -31, -32, -33, -33, -34, -34, -34, -35, -34, -35, -36, -37, -36, -35, -34, -34, -34, -34, -35, -36, -36, -36, -36, -36, -34, -32, -32, -32, -31, -31, -30, -29, -28, -27, -25, -23, -20, -19, -19, -19, -18, -16, -14, -11, -8, -6, -5, -3, -1, 0, 1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13, 13, 13, 13, 13, 14, 14, 15, 16, 17, 18, 17, 17, 16, 16, 16, 16, 16, 17, 17, 17, 16, 14, 14, 12, 10, 7, 6, 6, 7, 5, 1, 0, 0, 0, -0, 0, 0, 1, 1,
+ /* 60.0 */ 0, 3, 5, 5, 5, 6, 7, 7, 8, 9, 9, 10, 10, 11, 12, 12, 12, 13, 13, 15, 15, 15, 15, 15, 15, 15, 14, 13, 9, 11, 13, 13, 13, 12, 12, 12, 11, 10, 11, 10, 11, 12, 11, 10, 8, 7, 5, 4, 3, 2, 0, -1, -3, -4, -5, -7, -10, -12, -12, -14, -16, -17, -18, -20, -22, -24, -26, -28, -29, -30, -31, -32, -33, -34, -35, -36, -37, -39, -40, -41, -42, -43, -44, -46, -47, -48, -49, -50, -49, -48, -47, -46, -47, -47, -47, -45, -44, -43, -43, -42, -42, -41, -38, -35, -32, -30, -28, -27, -25, -24, -23, -21, -19, -17, -13, -8, -5, -2, 1, 4, 5, 7, 9, 11, 14, 17, 19, 22, 24, 27, 29, 30, 33, 36, 39, 41, 44, 45, 48, 48, 49, 50, 51, 52, 54, 56, 58, 60, 61, 63, 64, 64, 64, 64, 64, 63, 63, 62, 61, 61, 61, 60, 60, 60, 60, 60, 60, 58, 58, 57, 55, 56, 56, 55, 55, 54, 54, 53, 51, 49, 48, 47, 47, 45, 45, 45, 44, 45, 45, 42, 40, 39, 36, 33, 31, 29, 27, 25, 23, 20, 19, 19, 19, 20, 19, 18, 16, 16, 15, 15, 16, 16, 16, 16, 16, 16, 14, 12, 11, 12, 11, 11, 11, 11, 11, 10, 8, 7, 7, 7, 6, 5, 4, 3, 2, 0, -1, -2, -3, -3, -4, -8, -10, -11, -13, -15, -16, -17, -18, -20, -21, -23, -24, -25, -26, -26, -28, -28, -29, -30, -31, -31, -32, -32, -32, -32, -32, -32, -33, -34, -34, -33, -32, -31, -31, -33, -35, -35, -34, -34, -34, -34, -33, -33, -32, -31, -31, -31, -29, -28, -28, -28, -28, -28, -27, -26, -23, -20, -19, -18, -17, -15, -12, -10, -8, -6, -4, -3, -2, -1, 1, 2, 4, 4, 5, 5, 6, 9, 10, 11, 12, 13, 12, 13, 14, 14, 14, 14, 14, 15, 16, 17, 17, 17, 17, 16, 15, 14, 14, 14, 14, 15, 14, 13, 13, 13, 12, 11, 9, 8, 9, 4, -1, -1, -1, -2, -2, -1, -0, 0, 0,
+ /* 61.0 */ 5, 4, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 9, 10, 11, 11, 11, 12, 12, 13, 14, 14, 14, 14, 14, 15, 15, 15, 11, 6, 8, 12, 14, 16, 17, 18, 18, 16, 15, 17, 16, 13, 12, 10, 8, 7, 6, 5, 4, 3, 1, -0, -1, -2, -3, -5, -8, -11, -12, -14, -16, -18, -20, -22, -24, -26, -28, -29, -30, -31, -32, -32, -33, -34, -35, -37, -38, -39, -41, -42, -43, -44, -45, -46, -48, -48, -49, -49, -49, -48, -47, -46, -46, -46, -45, -44, -43, -42, -40, -38, -37, -37, -35, -33, -31, -29, -27, -25, -24, -23, -22, -21, -20, -18, -13, -8, -3, -0, 3, 6, 8, 9, 11, 13, 16, 19, 21, 23, 25, 27, 29, 31, 33, 36, 38, 42, 46, 46, 48, 49, 49, 50, 51, 52, 53, 55, 56, 58, 60, 62, 63, 64, 65, 65, 65, 64, 64, 63, 63, 62, 61, 61, 60, 60, 60, 60, 59, 60, 59, 59, 58, 58, 57, 57, 55, 53, 52, 51, 51, 51, 49, 48, 47, 46, 45, 46, 46, 46, 45, 43, 40, 38, 36, 34, 32, 31, 29, 26, 23, 21, 20, 19, 19, 19, 19, 18, 17, 15, 15, 16, 16, 16, 16, 15, 15, 14, 13, 12, 12, 12, 11, 11, 11, 11, 10, 9, 9, 8, 7, 7, 6, 5, 3, 3, 1, -0, -2, -3, -4, -3, -3, -6, -9, -10, -11, -13, -15, -17, -18, -19, -20, -21, -23, -24, -24, -25, -26, -27, -27, -28, -29, -29, -29, -29, -29, -29, -29, -29, -30, -31, -30, -30, -30, -30, -31, -32, -33, -34, -34, -34, -33, -33, -32, -31, -31, -30, -30, -30, -29, -28, -27, -26, -26, -26, -26, -26, -24, -21, -19, -19, -17, -15, -13, -11, -10, -8, -7, -6, -5, -3, -1, 0, 2, 3, 3, 4, 5, 8, 9, 11, 11, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 16, 17, 16, 15, 14, 13, 13, 14, 14, 14, 12, 11, 12, 12, 12, 11, 10, 10, 10, 8, 5, 3, 1, -1, -2, -0, 4, 5,
+ /* 62.0 */ 5, 5, 4, 5, 5, 6, 6, 6, 6, 6, 7, 7, 8, 8, 9, 10, 10, 11, 11, 12, 12, 12, 12, 12, 12, 14, 16, 15, 12, 10, 11, 16, 18, 18, 17, 17, 18, 18, 17, 15, 13, 12, 11, 9, 8, 7, 6, 5, 4, 2, 2, 1, 0, -1, -2, -4, -7, -11, -13, -14, -15, -18, -20, -22, -24, -26, -28, -29, -29, -30, -31, -32, -34, -34, -35, -37, -38, -40, -42, -42, -43, -44, -45, -46, -47, -48, -48, -48, -48, -48, -47, -46, -45, -44, -44, -43, -42, -40, -39, -38, -36, -34, -33, -31, -29, -27, -25, -24, -24, -23, -21, -19, -16, -13, -9, -5, -1, 2, 6, 10, 9, 10, 12, 15, 18, 20, 22, 23, 25, 29, 31, 33, 37, 42, 45, 48, 49, 47, 47, 50, 50, 50, 51, 52, 53, 54, 55, 57, 59, 60, 62, 63, 64, 65, 65, 65, 65, 64, 64, 64, 63, 62, 62, 61, 61, 60, 60, 60, 60, 60, 59, 59, 58, 57, 56, 54, 52, 50, 49, 50, 50, 49, 48, 47, 46, 45, 45, 46, 46, 45, 42, 39, 37, 35, 34, 32, 30, 27, 23, 22, 21, 19, 19, 19, 18, 18, 19, 19, 18, 18, 18, 17, 17, 16, 15, 14, 14, 14, 13, 12, 11, 12, 11, 11, 10, 9, 9, 8, 8, 7, 6, 4, 2, 1, -0, -1, -1, -2, -3, -3, -3, -6, -9, -10, -11, -11, -13, -15, -17, -18, -19, -20, -21, -22, -22, -23, -24, -25, -25, -25, -26, -27, -27, -28, -27, -27, -27, -27, -27, -27, -28, -29, -29, -29, -29, -29, -30, -30, -31, -31, -31, -31, -31, -30, -30, -29, -29, -29, -29, -28, -27, -25, -25, -24, -24, -23, -22, -20, -19, -22, -22, -18, -14, -12, -12, -11, -10, -9, -8, -6, -5, -3, -1, -0, 1, 1, 2, 4, 7, 8, 9, 11, 12, 12, 12, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 15, 14, 14, 13, 13, 13, 13, 13, 12, 11, 11, 11, 10, 10, 11, 11, 11, 10, 8, 6, 4, 2, 3, 5, 5, 5,
+ /* 63.0 */ 4, 5, 5, 4, 5, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 9, 10, 11, 11, 11, 11, 11, 12, 12, 12, 12, 14, 16, 17, 15, 15, 16, 17, 17, 17, 16, 15, 13, 12, 12, 11, 10, 8, 7, 6, 5, 4, 3, 2, 2, 1, 0, -1, -3, -5, -8, -11, -12, -14, -16, -18, -20, -22, -23, -25, -27, -27, -28, -29, -30, -31, -32, -34, -35, -36, -38, -39, -41, -42, -43, -44, -45, -45, -45, -45, -45, -45, -45, -44, -44, -43, -43, -42, -41, -41, -40, -39, -38, -37, -36, -35, -33, -32, -31, -29, -28, -26, -23, -20, -16, -13, -11, -9, -6, -4, -1, 2, 7, 10, 11, 12, 14, 16, 18, 20, 22, 25, 28, 30, 32, 37, 41, 44, 47, 49, 50, 48, 46, 48, 50, 50, 51, 52, 52, 53, 55, 56, 57, 59, 61, 62, 63, 64, 65, 65, 65, 65, 65, 65, 63, 63, 63, 62, 61, 61, 61, 62, 62, 61, 60, 60, 59, 57, 56, 54, 52, 51, 50, 50, 49, 48, 47, 47, 45, 45, 45, 45, 44, 42, 41, 40, 37, 35, 33, 32, 31, 29, 25, 22, 20, 18, 18, 18, 18, 18, 18, 18, 18, 18, 17, 16, 15, 15, 15, 14, 14, 14, 13, 13, 12, 12, 11, 11, 11, 9, 9, 9, 9, 8, 6, 4, 2, 1, 1, 1, -0, -2, -2, -2, -3, -6, -8, -10, -11, -11, -12, -13, -14, -16, -17, -18, -19, -20, -21, -21, -22, -23, -23, -23, -24, -24, -24, -25, -24, -25, -26, -26, -26, -27, -26, -27, -27, -27, -28, -29, -29, -29, -29, -30, -30, -30, -29, -30, -30, -29, -29, -29, -28, -26, -25, -24, -24, -23, -22, -22, -23, -22, -20, -18, -18, -17, -15, -14, -14, -13, -13, -12, -11, -11, -10, -8, -7, -6, -5, -4, -2, 1, 5, 7, 8, 8, 9, 9, 10, 11, 11, 11, 12, 12, 12, 12, 12, 11, 12, 13, 13, 13, 13, 13, 13, 12, 12, 11, 12, 12, 11, 10, 10, 10, 9, 9, 9, 8, 7, 7, 6, 5, 5, 5, 4,
+ /* 64.0 */ 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 8, 9, 10, 10, 10, 10, 10, 11, 12, 12, 12, 13, 14, 14, 15, 15, 14, 13, 13, 13, 12, 12, 11, 10, 10, 9, 8, 7, 6, 5, 5, 4, 3, 2, -0, -3, -6, -8, -9, -11, -13, -14, -16, -18, -19, -21, -22, -23, -24, -25, -27, -28, -29, -30, -32, -34, -34, -35, -37, -39, -40, -42, -43, -44, -44, -43, -43, -42, -41, -41, -40, -40, -40, -40, -39, -39, -38, -37, -37, -36, -35, -34, -34, -33, -32, -31, -29, -28, -26, -23, -20, -16, -13, -11, -8, -4, -2, -2, -1, 1, 7, 12, 14, 15, 16, 19, 21, 22, 26, 28, 28, 29, 33, 36, 40, 43, 46, 49, 50, 50, 48, 45, 47, 50, 52, 53, 54, 54, 54, 55, 56, 58, 59, 61, 62, 63, 65, 65, 65, 66, 66, 66, 67, 67, 66, 65, 65, 64, 63, 63, 62, 61, 60, 58, 57, 55, 53, 52, 52, 52, 51, 51, 50, 49, 47, 45, 43, 42, 43, 43, 42, 41, 41, 39, 36, 34, 32, 31, 30, 30, 28, 26, 24, 21, 19, 18, 17, 18, 18, 18, 18, 18, 18, 17, 16, 16, 16, 15, 15, 15, 14, 14, 13, 13, 12, 11, 10, 9, 9, 9, 8, 7, 6, 5, 4, 2, 1, -0, -1, -2, -3, -2, -2, -4, -6, -8, -10, -11, -12, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -21, -21, -21, -21, -22, -22, -22, -22, -23, -24, -25, -25, -25, -25, -24, -24, -25, -27, -28, -28, -28, -28, -28, -29, -29, -29, -28, -27, -26, -26, -26, -25, -24, -23, -22, -21, -20, -20, -20, -20, -20, -19, -18, -18, -18, -17, -16, -16, -15, -14, -13, -11, -9, -10, -9, -6, -3, -0, 1, 3, 4, 5, 6, 6, 6, 7, 8, 9, 9, 9, 11, 11, 10, 10, 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 12, 12, 12, 11, 11, 11, 10, 10, 9, 9, 8, 8, 8, 7, 6, 5, 4, 4, 4, 4,
+ /* 65.0 */ 5, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 11, 11, 11, 11, 10, 9, 9, 8, 7, 7, 5, 3, 2, -0, -3, -7, -10, -11, -11, -13, -15, -16, -16, -18, -19, -20, -20, -22, -22, -24, -25, -26, -28, -29, -31, -33, -34, -34, -36, -37, -38, -39, -40, -41, -41, -41, -41, -40, -39, -38, -38, -38, -37, -37, -37, -37, -36, -35, -33, -33, -33, -33, -32, -32, -30, -28, -26, -25, -23, -21, -19, -16, -13, -11, -8, -6, -5, -2, 1, 3, 6, 12, 16, 18, 19, 20, 22, 26, 28, 27, 27, 29, 33, 37, 40, 43, 46, 48, 49, 49, 48, 45, 44, 46, 48, 51, 54, 56, 56, 56, 56, 58, 59, 59, 61, 63, 64, 64, 65, 66, 66, 67, 67, 67, 67, 67, 66, 66, 64, 63, 62, 61, 60, 58, 57, 56, 54, 53, 53, 52, 52, 51, 51, 50, 48, 46, 45, 44, 43, 41, 41, 40, 40, 39, 38, 36, 34, 32, 31, 30, 29, 27, 25, 23, 20, 19, 18, 18, 18, 18, 17, 18, 18, 17, 17, 17, 17, 17, 17, 17, 15, 13, 13, 12, 11, 10, 9, 8, 8, 7, 7, 6, 6, 5, 4, 2, 1, -0, -0, -2, -3, -2, -1, -2, -4, -6, -8, -10, -11, -11, -13, -13, -14, -15, -16, -17, -18, -18, -19, -19, -19, -19, -20, -21, -20, -20, -20, -21, -22, -23, -23, -23, -23, -22, -23, -25, -25, -25, -25, -25, -25, -24, -24, -25, -25, -24, -23, -22, -22, -22, -21, -20, -19, -18, -18, -17, -17, -18, -18, -18, -18, -17, -17, -17, -17, -17, -17, -16, -14, -10, -7, -5, -4, -4, -3, -2, -0, 0, 1, 2, 3, 3, 4, 5, 6, 6, 7, 9, 9, 9, 10, 9, 7, 7, 8, 8, 8, 8, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 10, 10, 9, 9, 7, 7, 7, 6, 6, 5, 5, 5, 5, 5,
+ /* 66.0 */ 5, 4, 4, 4, 4, 4, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 10, 10, 9, 9, 10, 10, 9, 9, 9, 9, 9, 9, 9, 8, 7, 6, 6, 4, 2, -0, -2, -4, -5, -6, -7, -7, -9, -10, -12, -13, -15, -16, -17, -18, -19, -19, -19, -20, -21, -23, -24, -25, -27, -29, -30, -32, -33, -34, -36, -36, -37, -38, -38, -39, -39, -39, -38, -37, -37, -36, -36, -36, -36, -35, -34, -34, -34, -33, -33, -32, -31, -30, -30, -29, -28, -28, -26, -24, -23, -21, -18, -16, -13, -11, -8, -5, -1, 3, 6, 8, 9, 13, 17, 19, 21, 22, 24, 27, 28, 30, 31, 32, 34, 36, 39, 42, 44, 45, 47, 48, 48, 48, 48, 49, 49, 51, 53, 55, 57, 58, 58, 59, 60, 60, 61, 61, 62, 63, 64, 65, 65, 65, 66, 66, 65, 65, 65, 64, 63, 63, 62, 60, 58, 58, 56, 54, 54, 53, 52, 52, 51, 51, 50, 49, 47, 46, 45, 44, 43, 43, 42, 41, 40, 39, 37, 35, 34, 33, 32, 31, 30, 29, 28, 25, 23, 22, 20, 20, 19, 18, 18, 18, 18, 17, 17, 18, 18, 17, 16, 15, 15, 15, 14, 13, 12, 12, 12, 10, 8, 6, 6, 7, 6, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -6, -5, -4, -6, -8, -10, -11, -12, -13, -14, -16, -17, -17, -17, -17, -17, -17, -17, -18, -19, -19, -19, -18, -19, -20, -21, -22, -22, -22, -22, -23, -23, -22, -22, -22, -23, -23, -22, -22, -22, -22, -21, -21, -20, -20, -19, -18, -17, -17, -16, -16, -15, -15, -15, -16, -15, -15, -15, -15, -14, -14, -15, -15, -14, -12, -8, -6, -4, -4, -5, -4, -3, -2, -1, -0, 1, 2, 3, 4, 5, 5, 5, 5, 7, 8, 8, 7, 5, 4, 5, 7, 7, 7, 7, 7, 7, 8, 8, 9, 9, 10, 10, 10, 10, 10, 10, 9, 9, 8, 8, 8, 6, 6, 6, 6, 5, 5, 5, 5,
+ /* 67.0 */ 5, 5, 4, 4, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 6, 7, 8, 8, 9, 9, 9, 9, 9, 9, 8, 7, 7, 7, 7, 7, 7, 7, 6, 5, 4, 4, 2, -0, -1, -2, -3, -4, -5, -5, -6, -8, -9, -10, -12, -13, -15, -16, -16, -17, -18, -19, -20, -22, -23, -25, -26, -28, -30, -31, -32, -33, -34, -35, -36, -36, -37, -37, -37, -37, -37, -36, -35, -34, -34, -33, -32, -31, -31, -32, -32, -31, -31, -30, -29, -28, -28, -27, -27, -26, -26, -24, -22, -21, -19, -16, -14, -10, -7, -3, 1, 6, 8, 7, 8, 11, 15, 18, 19, 21, 23, 25, 26, 26, 28, 30, 31, 33, 36, 39, 41, 43, 44, 46, 47, 48, 48, 49, 50, 53, 55, 56, 57, 57, 57, 57, 58, 58, 59, 60, 60, 60, 61, 62, 63, 63, 64, 64, 64, 64, 63, 63, 63, 62, 60, 59, 58, 57, 56, 55, 54, 53, 52, 52, 51, 51, 50, 49, 48, 48, 47, 45, 43, 43, 42, 43, 42, 41, 40, 38, 36, 33, 31, 30, 31, 31, 31, 30, 28, 26, 24, 23, 22, 20, 19, 18, 18, 18, 17, 17, 17, 17, 18, 18, 17, 16, 15, 14, 13, 12, 12, 11, 9, 8, 7, 8, 7, 6, 4, 3, 2, 1, 0, -0, -1, -2, -3, -4, -5, -7, -7, -6, -5, -5, -7, -8, -10, -12, -13, -14, -15, -15, -15, -15, -15, -15, -16, -16, -16, -17, -17, -17, -18, -17, -18, -18, -19, -20, -20, -19, -20, -20, -20, -20, -20, -19, -19, -20, -20, -19, -18, -18, -19, -19, -18, -18, -17, -17, -16, -15, -15, -14, -14, -13, -13, -12, -12, -12, -12, -12, -13, -14, -14, -11, -8, -5, -5, -5, -5, -5, -4, -3, -2, -2, -1, 0, 3, 3, 3, 3, 5, 6, 5, 2, 2, 4, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 8, 8, 8, 7, 7, 6, 6, 6, 6, 6, 6, 5,
+ /* 68.0 */ 5, 4, 4, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 4, 4, 4, 4, 5, 6, 8, 8, 7, 7, 8, 9, 9, 9, 9, 8, 8, 8, 7, 7, 6, 5, 4, 3, 2, 0, -2, -2, -2, -2, -3, -5, -6, -6, -7, -8, -8, -9, -10, -10, -11, -12, -15, -17, -18, -19, -21, -23, -25, -26, -28, -29, -30, -31, -32, -32, -33, -33, -34, -35, -35, -35, -35, -35, -35, -34, -34, -33, -32, -30, -30, -30, -30, -31, -31, -30, -28, -26, -26, -26, -26, -25, -24, -23, -22, -21, -19, -17, -14, -12, -9, -5, -2, 0, 2, 3, 6, 9, 12, 14, 17, 19, 22, 24, 25, 25, 25, 25, 26, 27, 29, 32, 34, 36, 38, 40, 42, 43, 45, 46, 47, 48, 49, 51, 54, 56, 56, 56, 56, 57, 58, 59, 59, 59, 59, 60, 59, 59, 60, 61, 61, 62, 62, 62, 62, 61, 61, 60, 59, 59, 58, 57, 56, 55, 54, 52, 51, 51, 51, 50, 49, 49, 48, 48, 48, 47, 45, 44, 42, 41, 41, 41, 41, 41, 39, 36, 32, 30, 30, 31, 32, 31, 29, 28, 27, 25, 24, 23, 22, 21, 20, 19, 18, 18, 18, 18, 18, 17, 16, 15, 14, 13, 11, 11, 11, 10, 10, 9, 9, 8, 6, 5, 4, 3, 2, 1, -0, -1, -1, -2, -3, -3, -4, -5, -6, -7, -7, -6, -6, -7, -9, -11, -12, -13, -14, -14, -14, -14, -14, -14, -14, -15, -15, -15, -16, -16, -16, -15, -16, -17, -17, -18, -18, -17, -17, -16, -16, -16, -17, -16, -16, -16, -17, -16, -16, -16, -16, -17, -16, -17, -16, -16, -15, -15, -15, -14, -13, -12, -12, -11, -11, -11, -11, -12, -14, -15, -16, -14, -10, -7, -5, -5, -5, -5, -4, -4, -3, -2, -1, 1, 1, 1, 2, 1, 0, 1, 2, 3, 3, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 8, 8, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5,
+ /* 69.0 */ 4, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 5, 6, 7, 7, 7, 7, 5, 4, 3, 1, -2, -4, -5, -6, -6, -6, -6, -6, -7, -8, -8, -9, -9, -9, -8, -8, -9, -11, -12, -14, -15, -17, -18, -19, -20, -21, -22, -23, -26, -28, -30, -30, -31, -31, -32, -31, -31, -31, -32, -32, -32, -32, -31, -31, -30, -29, -28, -28, -28, -28, -28, -28, -27, -25, -24, -23, -24, -23, -22, -21, -21, -19, -17, -14, -11, -9, -6, -4, -2, -0, 1, 1, 4, 9, 13, 15, 16, 18, 21, 24, 25, 26, 27, 26, 24, 23, 24, 26, 29, 31, 34, 36, 38, 39, 41, 42, 44, 45, 47, 48, 50, 51, 53, 55, 54, 55, 57, 59, 59, 60, 61, 61, 60, 59, 59, 59, 59, 59, 60, 60, 61, 61, 60, 60, 60, 59, 58, 58, 57, 56, 54, 52, 52, 51, 51, 50, 49, 49, 49, 48, 47, 47, 46, 45, 44, 43, 43, 41, 40, 39, 39, 39, 38, 37, 35, 33, 32, 31, 31, 30, 29, 28, 27, 26, 25, 24, 22, 21, 20, 19, 18, 17, 17, 16, 15, 14, 13, 13, 12, 11, 10, 10, 9, 8, 8, 7, 6, 4, 4, 3, 2, 1, 0, -0, -1, -2, -3, -3, -4, -5, -5, -5, -6, -7, -7, -8, -8, -9, -10, -11, -11, -12, -12, -12, -12, -12, -13, -13, -13, -14, -14, -14, -15, -15, -15, -14, -14, -15, -16, -16, -15, -15, -15, -14, -14, -15, -15, -16, -17, -17, -16, -16, -15, -15, -15, -15, -14, -14, -13, -13, -12, -12, -12, -12, -12, -12, -11, -10, -10, -10, -12, -13, -14, -14, -13, -11, -7, -5, -5, -6, -5, -4, -4, -3, -2, -2, -1, 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 3, 4, 4, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4,
+ /* 70.0 */ 3, 2, 2, 2, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, -0, -1, -1, -1, -1, -1, -1, -1, -0, -0, -0, -0, -1, -1, -2, -2, -2, -1, -2, -2, -2, -2, -3, -3, -3, -4, -4, -4, -4, -5, -6, -7, -7, -8, -9, -9, -10, -11, -11, -12, -13, -13, -14, -15, -17, -18, -18, -18, -18, -18, -19, -20, -22, -25, -27, -28, -28, -28, -28, -29, -29, -28, -28, -28, -28, -28, -27, -27, -26, -25, -25, -25, -26, -26, -26, -25, -25, -24, -22, -21, -21, -20, -20, -18, -17, -15, -13, -11, -8, -5, -2, -1, 1, 3, 4, 4, 5, 7, 10, 14, 16, 19, 21, 23, 24, 26, 27, 28, 28, 27, 26, 26, 27, 30, 32, 35, 36, 38, 39, 40, 42, 43, 44, 46, 47, 48, 50, 52, 54, 55, 55, 56, 57, 57, 57, 56, 57, 58, 58, 57, 56, 57, 58, 60, 59, 59, 59, 59, 59, 59, 59, 58, 57, 56, 55, 54, 52, 51, 51, 51, 51, 50, 50, 49, 48, 47, 47, 46, 45, 45, 44, 43, 43, 42, 41, 40, 39, 39, 38, 37, 35, 33, 31, 30, 28, 28, 27, 25, 24, 25, 24, 23, 21, 20, 19, 18, 17, 16, 15, 14, 14, 13, 12, 11, 10, 10, 9, 8, 7, 6, 6, 5, 4, 3, 2, 2, 1, -0, -1, -2, -2, -2, -2, -3, -4, -5, -6, -7, -7, -8, -8, -9, -9, -9, -10, -10, -10, -10, -10, -11, -11, -11, -12, -13, -13, -14, -14, -14, -14, -15, -14, -14, -13, -13, -13, -12, -12, -13, -14, -14, -15, -15, -15, -15, -15, -15, -15, -14, -13, -12, -11, -10, -9, -9, -10, -11, -11, -11, -11, -11, -11, -10, -10, -9, -8, -9, -9, -9, -10, -10, -10, -9, -7, -6, -6, -6, -5, -4, -3, -2, -2, -1, -1, -1, -1, -1, -1, -1, -0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3,
+ /* 71.0 */ 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 0, -0, -0, -0, -0, -1, -1, -1, -1, -1, -1, -2, -2, -2, -3, -3, -4, -4, -4, -4, -3, -2, -3, -4, -5, -6, -6, -6, -6, -5, -5, -4, -3, -3, -4, -5, -7, -9, -10, -11, -12, -12, -13, -13, -14, -15, -15, -15, -16, -16, -17, -17, -17, -18, -19, -21, -23, -24, -25, -25, -25, -25, -25, -26, -26, -25, -24, -23, -23, -22, -21, -20, -19, -20, -21, -21, -21, -20, -20, -19, -18, -18, -17, -16, -15, -13, -12, -10, -8, -6, -4, -2, -0, 1, 2, 3, 3, 5, 8, 10, 12, 14, 16, 17, 19, 22, 24, 26, 26, 27, 28, 29, 28, 28, 28, 30, 32, 34, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 49, 50, 51, 52, 53, 53, 54, 55, 54, 54, 54, 54, 53, 53, 55, 56, 56, 57, 57, 56, 57, 57, 57, 57, 58, 57, 57, 56, 56, 55, 54, 54, 53, 53, 52, 52, 51, 50, 49, 48, 47, 46, 46, 45, 44, 44, 43, 42, 42, 41, 40, 40, 39, 37, 35, 33, 31, 29, 28, 28, 27, 25, 24, 23, 22, 21, 20, 19, 17, 17, 16, 16, 15, 15, 13, 12, 11, 10, 9, 9, 8, 8, 8, 7, 6, 5, 3, 3, 2, 2, 1, 1, 0, -1, -1, -2, -3, -4, -5, -6, -7, -7, -7, -7, -8, -8, -8, -9, -9, -10, -10, -10, -10, -9, -9, -10, -11, -11, -12, -12, -13, -13, -14, -14, -14, -14, -14, -14, -14, -14, -15, -15, -15, -14, -14, -13, -13, -12, -12, -12, -13, -13, -12, -11, -10, -9, -9, -9, -10, -10, -10, -10, -10, -10, -10, -9, -9, -8, -8, -7, -7, -7, -7, -7, -8, -8, -8, -7, -6, -6, -5, -5, -4, -4, -3, -3, -2, -2, -2, -1, -1, -1, -1, -0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 2, 2, 3,
+ /* 72.0 */ 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, -0, -0, -0, 0, 0, 1, 0, 0, -0, -1, -1, -2, -2, -3, -3, -4, -6, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -7, -7, -7, -7, -6, -5, -4, -5, -7, -10, -11, -10, -10, -10, -9, -10, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -21, -22, -22, -22, -22, -23, -23, -22, -21, -20, -19, -18, -18, -18, -17, -16, -17, -17, -17, -16, -15, -14, -13, -13, -12, -11, -10, -9, -8, -8, -6, -4, -1, 1, 1, 2, 4, 7, 9, 10, 11, 12, 13, 14, 16, 17, 19, 21, 23, 25, 26, 26, 25, 26, 27, 28, 30, 32, 34, 35, 36, 37, 37, 38, 39, 39, 40, 41, 42, 43, 44, 46, 47, 48, 49, 49, 50, 50, 51, 51, 51, 51, 53, 54, 53, 53, 53, 53, 54, 55, 55, 54, 54, 54, 54, 54, 54, 53, 53, 53, 53, 53, 53, 53, 52, 52, 52, 52, 51, 51, 50, 49, 49, 48, 47, 46, 45, 44, 43, 42, 42, 41, 41, 41, 40, 38, 36, 34, 33, 31, 29, 27, 26, 24, 23, 22, 21, 20, 19, 18, 18, 17, 16, 15, 15, 14, 13, 12, 11, 10, 9, 8, 8, 7, 7, 6, 6, 5, 4, 3, 3, 2, 2, 2, 1, -1, -2, -2, -3, -3, -4, -5, -5, -6, -6, -6, -7, -7, -7, -7, -8, -8, -8, -8, -8, -8, -8, -9, -10, -11, -11, -11, -11, -12, -12, -12, -13, -13, -13, -13, -13, -13, -14, -14, -14, -13, -13, -13, -13, -12, -13, -14, -14, -13, -12, -12, -11, -10, -10, -10, -10, -10, -10, -10, -10, -9, -9, -9, -9, -9, -8, -8, -7, -7, -7, -7, -7, -7, -7, -6, -6, -5, -5, -4, -4, -3, -3, -3, -3, -2, -2, -2, -1, -1, -1, -0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2,
+ /* 73.0 */ 2, 2, 2, 1, 1, 0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -1, -1, -1, -1, -2, -3, -4, -5, -6, -7, -8, -8, -8, -8, -8, -8, -7, -7, -7, -8, -8, -8, -8, -8, -8, -9, -9, -9, -9, -9, -8, -7, -7, -7, -8, -10, -10, -10, -10, -9, -9, -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -20, -20, -20, -20, -20, -21, -20, -19, -18, -17, -16, -15, -15, -14, -13, -12, -12, -12, -12, -12, -11, -11, -11, -11, -10, -8, -6, -5, -5, -3, -1, 2, 3, 4, 6, 9, 12, 13, 13, 14, 14, 14, 15, 16, 17, 19, 22, 24, 22, 20, 20, 21, 22, 23, 24, 26, 29, 31, 32, 34, 36, 37, 37, 37, 37, 38, 39, 40, 41, 42, 42, 43, 45, 46, 47, 48, 48, 49, 49, 49, 48, 48, 49, 50, 50, 49, 50, 51, 51, 51, 52, 53, 53, 52, 51, 51, 50, 51, 51, 51, 51, 51, 51, 50, 50, 50, 50, 49, 49, 49, 49, 49, 48, 48, 47, 46, 46, 45, 44, 43, 43, 42, 42, 41, 40, 37, 35, 33, 31, 30, 29, 28, 26, 24, 23, 22, 21, 20, 19, 18, 17, 17, 16, 16, 15, 14, 14, 13, 12, 10, 10, 9, 8, 7, 7, 6, 5, 4, 3, 3, 2, 2, 2, 2, 2, 1, -0, -2, -2, -3, -3, -4, -4, -4, -5, -5, -5, -6, -6, -6, -7, -7, -7, -7, -7, -8, -8, -9, -9, -9, -9, -9, -10, -10, -11, -11, -12, -12, -12, -11, -11, -11, -11, -11, -12, -13, -13, -13, -12, -12, -12, -12, -13, -13, -13, -12, -11, -11, -11, -10, -10, -10, -10, -9, -9, -9, -9, -9, -8, -8, -7, -7, -7, -7, -7, -6, -6, -6, -6, -5, -5, -4, -3, -3, -3, -3, -3, -2, -2, -1, -1, -1, -1, -0, -0, -0, -0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ /* 74.0 */ 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 3, 2, 2, 1, 1, 0, 0, -0, -1, -3, -4, -5, -5, -5, -6, -6, -6, -6, -6, -6, -6, -6, -5, -4, -4, -5, -6, -7, -7, -8, -9, -9, -9, -10, -10, -10, -9, -9, -7, -6, -5, -5, -7, -9, -9, -9, -9, -10, -10, -11, -12, -12, -13, -14, -15, -15, -15, -16, -16, -17, -17, -17, -17, -17, -17, -17, -16, -16, -15, -14, -13, -12, -12, -12, -11, -10, -10, -10, -10, -10, -10, -9, -8, -8, -7, -6, -5, -4, -3, -1, 1, 3, 6, 8, 11, 13, 14, 15, 15, 16, 16, 16, 17, 18, 20, 21, 20, 19, 18, 18, 20, 21, 22, 24, 25, 27, 29, 30, 32, 33, 34, 34, 35, 35, 36, 37, 37, 38, 38, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 49, 49, 50, 50, 51, 50, 49, 49, 48, 48, 48, 48, 48, 48, 48, 48, 47, 47, 47, 47, 47, 46, 45, 45, 45, 45, 45, 45, 44, 43, 43, 42, 41, 40, 39, 39, 38, 36, 35, 33, 31, 29, 28, 26, 25, 24, 23, 22, 21, 20, 19, 19, 18, 17, 16, 15, 15, 14, 13, 12, 11, 10, 9, 9, 8, 7, 7, 6, 5, 4, 4, 3, 3, 2, 2, 2, 2, 1, 0, -1, -2, -3, -3, -3, -4, -4, -4, -4, -4, -5, -5, -5, -5, -6, -6, -7, -7, -8, -8, -8, -8, -8, -9, -9, -9, -9, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -11, -10, -11, -11, -11, -10, -10, -9, -9, -9, -8, -8, -7, -7, -7, -7, -6, -6, -6, -5, -5, -5, -4, -4, -4, -4, -4, -3, -3, -3, -3, -2, -2, -2, -2, -2, -1, -1, -1, -1, -0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 2, 3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ /* 75.0 */ 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 1, 1, 0, -0, -1, -1, -2, -2, -2, -3, -4, -4, -5, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -5, -6, -6, -7, -7, -8, -8, -9, -9, -9, -9, -8, -7, -6, -4, -3, -4, -6, -8, -10, -10, -11, -11, -11, -12, -12, -12, -12, -11, -11, -12, -12, -12, -13, -13, -14, -14, -14, -14, -14, -14, -13, -12, -12, -11, -10, -9, -9, -8, -7, -7, -7, -6, -5, -4, -3, -2, -1, 1, 2, 4, 6, 7, 7, 6, 5, 7, 9, 12, 14, 15, 16, 17, 18, 18, 19, 19, 19, 19, 18, 18, 17, 17, 18, 19, 20, 21, 22, 23, 25, 27, 28, 30, 31, 32, 32, 33, 33, 34, 35, 36, 36, 36, 37, 37, 38, 38, 39, 40, 41, 42, 42, 43, 44, 45, 46, 46, 45, 45, 46, 47, 47, 47, 45, 44, 44, 44, 45, 45, 46, 47, 47, 47, 46, 46, 46, 46, 46, 46, 45, 45, 45, 45, 44, 44, 44, 44, 44, 44, 44, 44, 43, 42, 42, 41, 41, 40, 40, 40, 40, 40, 37, 35, 33, 31, 30, 29, 28, 27, 26, 24, 23, 22, 21, 21, 20, 19, 18, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 9, 8, 7, 7, 6, 5, 4, 4, 3, 3, 2, 2, 2, 3, 3, 2, 1, -1, -2, -2, -3, -3, -4, -4, -4, -4, -5, -5, -5, -6, -6, -6, -6, -6, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -8, -8, -8, -8, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -8, -7, -7, -6, -6, -6, -6, -5, -5, -5, -5, -5, -4, -4, -3, -3, -3, -3, -2, -2, -2, -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, -0, -0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ /* 76.0 */ 2, 2, 2, 1, -0, -1, -0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, -1, -1, -1, -1, -1, -1, -1, -2, -3, -3, -3, -3, -3, -3, -3, -4, -4, -4, -5, -5, -6, -6, -6, -7, -7, -8, -8, -8, -8, -8, -7, -6, -5, -5, -5, -5, -5, -6, -7, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -9, -10, -10, -10, -10, -10, -10, -10, -9, -9, -8, -8, -7, -7, -6, -6, -6, -5, -5, -4, -3, -2, -2, -2, -1, -1, -1, -0, 1, 2, 3, 4, 5, 6, 8, 10, 11, 12, 13, 14, 14, 15, 15, 16, 16, 17, 17, 17, 18, 19, 19, 20, 21, 21, 22, 24, 25, 27, 28, 29, 30, 31, 31, 32, 32, 32, 33, 33, 34, 35, 36, 37, 38, 38, 39, 40, 41, 41, 42, 43, 44, 45, 46, 47, 47, 46, 44, 42, 40, 39, 38, 38, 38, 38, 38, 38, 39, 41, 42, 42, 43, 43, 44, 45, 44, 44, 43, 43, 43, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43, 42, 42, 41, 41, 40, 39, 40, 40, 39, 37, 34, 32, 31, 30, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 18, 17, 16, 15, 14, 13, 12, 11, 11, 10, 10, 9, 8, 8, 7, 7, 6, 5, 5, 5, 4, 4, 3, 3, 2, 2, 2, 2, 2, 1, 1, -0, -1, -1, -2, -3, -3, -4, -4, -5, -5, -5, -6, -6, -7, -7, -7, -6, -6, -6, -7, -7, -8, -8, -7, -7, -7, -7, -7, -7, -7, -7, -8, -8, -8, -8, -8, -8, -8, -7, -7, -6, -6, -5, -5, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, -0, -0, -0, -0, -0, -0, -1, -0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1, 2,
+ /* 77.0 */ 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 2, 2, 1, 1, 0, -0, -1, -1, -1, -1, -2, -2, -3, -3, -2, -3, -3, -4, -4, -4, -5, -5, -6, -6, -6, -6, -7, -7, -7, -7, -7, -6, -6, -6, -5, -4, -3, -3, -3, -3, -4, -5, -5, -5, -5, -5, -6, -6, -6, -7, -7, -8, -8, -8, -8, -8, -8, -7, -7, -6, -7, -7, -7, -7, -6, -6, -5, -4, -3, -3, -2, -3, -3, -2, -1, -0, 1, 3, 5, 6, 6, 7, 7, 8, 9, 9, 9, 9, 9, 10, 10, 11, 11, 13, 14, 16, 17, 19, 20, 21, 22, 23, 23, 24, 24, 24, 25, 26, 27, 27, 28, 29, 30, 30, 31, 31, 31, 31, 32, 33, 33, 34, 35, 35, 36, 37, 38, 38, 39, 40, 41, 42, 42, 43, 43, 43, 43, 42, 41, 39, 36, 33, 31, 31, 33, 33, 33, 33, 33, 34, 36, 38, 39, 40, 40, 41, 42, 42, 42, 42, 41, 41, 41, 41, 42, 41, 41, 41, 42, 42, 41, 41, 40, 40, 40, 39, 38, 38, 37, 35, 33, 32, 30, 30, 29, 29, 28, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 17, 16, 15, 15, 14, 13, 13, 12, 11, 11, 10, 9, 9, 8, 7, 7, 6, 6, 5, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 0, -1, -2, -2, -3, -3, -3, -3, -3, -3, -4, -4, -4, -4, -4, -5, -5, -5, -6, -6, -6, -6, -6, -6, -6, -6, -6, -7, -7, -7, -7, -7, -7, -7, -6, -5, -5, -5, -4, -4, -4, -4, -4, -3, -2, -2, -2, -2, -2, -2, -1, -0, -0, 0, 0, -0, -0, -1, -0, 0, 0, 1, 1, 1, 2, 2, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2,
+ /* 78.0 */ 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 4, 4, 4, 3, 3, 2, 2, 1, 0, 0, -0, -0, -0, -1, -2, -3, -3, -3, -3, -3, -3, -4, -4, -4, -5, -5, -5, -5, -5, -6, -6, -6, -6, -6, -6, -6, -5, -5, -5, -4, -4, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -4, -4, -5, -4, -4, -4, -4, -4, -4, -4, -4, -4, -3, -2, -1, -1, -1, -1, -1, -1, -1, -0, 1, 2, 4, 5, 6, 8, 9, 10, 10, 10, 10, 9, 9, 9, 9, 10, 12, 14, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 26, 27, 28, 28, 29, 29, 30, 30, 30, 30, 31, 31, 31, 32, 32, 33, 33, 33, 34, 34, 34, 35, 35, 36, 37, 37, 38, 38, 39, 39, 39, 38, 37, 36, 35, 34, 32, 31, 30, 29, 30, 30, 31, 31, 31, 31, 31, 33, 35, 36, 36, 36, 37, 38, 39, 40, 39, 39, 38, 38, 38, 39, 39, 39, 40, 40, 40, 39, 39, 39, 39, 38, 37, 35, 34, 32, 32, 32, 31, 30, 29, 29, 29, 28, 27, 26, 24, 24, 23, 22, 21, 20, 19, 19, 18, 17, 17, 16, 16, 15, 14, 14, 13, 13, 12, 12, 11, 10, 10, 9, 9, 8, 7, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 3, 3, 2, 1, 1, 0, -0, -0, -1, -1, -1, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -5, -5, -5, -5, -5, -5, -4, -3, -3, -2, -2, -2, -1, -1, -1, -2, -2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -2, -2, -2, -2, -2, -2, -2, -1, -0, 1, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3,
+ /* 79.0 */ 3, 3, 4, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, -0, -1, -1, -1, -2, -2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -3, -3, -2, -1, -1, -0, 0, 1, 1, 0, -0, -1, -1, -1, -1, -1, -1, -1, -0, 0, 1, 1, 1, 0, 1, 1, 1, 2, 2, 3, 4, 5, 6, 6, 6, 5, 5, 5, 5, 6, 8, 9, 10, 11, 11, 11, 10, 8, 8, 7, 7, 7, 8, 9, 11, 12, 14, 15, 17, 18, 20, 21, 22, 23, 24, 25, 26, 26, 27, 27, 28, 28, 29, 29, 30, 30, 31, 32, 32, 33, 33, 34, 34, 35, 35, 35, 35, 36, 36, 36, 37, 37, 37, 36, 35, 34, 33, 32, 31, 30, 29, 29, 28, 28, 29, 29, 30, 30, 30, 30, 31, 31, 32, 33, 34, 35, 36, 37, 37, 36, 36, 35, 36, 36, 37, 37, 37, 37, 38, 38, 39, 39, 38, 38, 37, 37, 36, 35, 35, 35, 34, 33, 32, 30, 29, 28, 28, 27, 26, 25, 24, 24, 23, 22, 22, 21, 20, 20, 19, 18, 18, 17, 17, 16, 15, 15, 14, 14, 14, 13, 13, 12, 11, 11, 10, 10, 9, 9, 8, 8, 8, 7, 7, 6, 6, 6, 5, 5, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, -0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, -2, -2, -1, -1, -0, 0, 0, 1, 1, 1, 1, 1, -0, -1, -2, -3, -3, -3, -3, -2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -2, -2, -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 4, 4, 3, 3, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3,
+ /* 80.0 */ 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -1, -1, -1, -1, -1, -2, -2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -1, -1, 0, 1, 2, 2, 3, 4, 4, 5, 5, 4, 4, 3, 3, 2, 2, 2, 2, 2, 3, 3, 4, 5, 5, 6, 8, 9, 10, 11, 11, 11, 10, 9, 8, 8, 8, 9, 10, 12, 13, 15, 15, 15, 15, 14, 13, 12, 10, 9, 8, 7, 7, 8, 9, 10, 11, 13, 14, 15, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 27, 28, 28, 29, 30, 30, 31, 32, 32, 33, 33, 34, 34, 35, 35, 36, 37, 37, 37, 37, 37, 36, 36, 35, 34, 33, 33, 32, 32, 32, 32, 32, 32, 32, 31, 31, 31, 31, 32, 32, 32, 32, 33, 34, 34, 35, 34, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 34, 33, 33, 32, 31, 30, 30, 29, 29, 29, 28, 27, 27, 26, 25, 25, 24, 24, 23, 23, 22, 22, 21, 20, 20, 19, 18, 18, 17, 17, 16, 16, 16, 15, 14, 14, 13, 13, 12, 12, 11, 11, 11, 11, 11, 10, 9, 9, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 1, 0, -0, -0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -0, -0, -0, 0, 0, -0, -0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -0, 0, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 4, 4,
+ /* 81.0 */ 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 8, 8, 9, 10, 10, 11, 11, 11, 11, 11, 12, 13, 14, 15, 16, 16, 17, 16, 16, 16, 17, 17, 18, 19, 19, 19, 18, 17, 15, 14, 12, 12, 11, 12, 12, 14, 15, 16, 18, 19, 20, 21, 21, 22, 23, 23, 24, 25, 25, 26, 27, 28, 29, 29, 30, 31, 32, 33, 34, 34, 35, 35, 34, 34, 34, 35, 35, 35, 35, 35, 34, 33, 32, 32, 32, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 32, 33, 33, 33, 32, 31, 31, 31, 31, 32, 32, 33, 33, 32, 32, 32, 32, 32, 32, 32, 32, 31, 31, 31, 31, 31, 31, 31, 30, 30, 30, 29, 29, 28, 28, 28, 28, 27, 27, 26, 26, 25, 25, 24, 24, 23, 23, 22, 21, 21, 20, 20, 19, 19, 18, 18, 18, 18, 17, 17, 16, 16, 16, 15, 15, 15, 14, 14, 14, 14, 13, 13, 12, 12, 11, 10, 10, 9, 9, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4,
+ /* 82.0 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 7, 8, 8, 9, 10, 10, 11, 11, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14, 15, 16, 17, 17, 18, 18, 19, 19, 20, 21, 21, 21, 21, 21, 20, 20, 19, 19, 19, 19, 18, 17, 17, 16, 16, 16, 16, 16, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 21, 22, 24, 25, 26, 27, 29, 29, 30, 31, 31, 31, 32, 32, 32, 32, 32, 32, 31, 31, 30, 30, 29, 29, 28, 27, 27, 27, 27, 27, 28, 29, 30, 31, 31, 32, 32, 31, 31, 30, 30, 29, 29, 29, 29, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 32, 31, 31, 31, 30, 30, 29, 28, 28, 27, 27, 26, 26, 26, 26, 25, 24, 24, 23, 23, 22, 22, 22, 22, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 19, 19, 18, 18, 17, 17, 17, 17, 17, 17, 17, 16, 16, 16, 16, 15, 14, 13, 12, 12, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8, 7, 7, 8, 8, 8, 8, 8, 7, 6, 6, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 5, 5, 5, 5, 5, 4, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
+ /* 83.0 */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 14, 14, 15, 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 22, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 28, 28, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 29, 29, 29, 28, 28, 28, 28, 28, 28, 28, 28, 27, 27, 27, 27, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 28, 28, 28, 28, 28, 28, 28, 28, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 26, 26, 26, 25, 25, 25, 25, 24, 24, 24, 23, 23, 23, 22, 22, 22, 21, 21, 21, 21, 20, 20, 19, 19, 19, 18, 18, 18, 18, 17, 17, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 14, 14, 13, 13, 12, 12, 12, 11, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 7, 7, 7, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 5, 5, 6, 7, 7, 8, 8, 7, 6, 6, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5,
+ /* 84.0 */ 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 23, 23, 23, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 26, 26, 26, 26, 26, 26, 26, 26, 25, 25, 25, 25, 25, 25, 25, 24, 24, 24, 24, 24, 24, 23, 23, 23, 23, 23, 22, 22, 22, 22, 21, 21, 21, 21, 20, 20, 20, 19, 19, 19, 19, 18, 18, 18, 18, 17, 17, 17, 16, 16, 16, 16, 15, 15, 15, 15, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 12, 12, 12, 12, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 9, 9, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 7, 7, 8, 8, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6,
+ /* 85.0 */ 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 25, 25, 25, 25, 25, 25, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 23, 23, 23, 22, 22, 22, 21, 21, 21, 21, 20, 20, 20, 20, 20, 20, 19, 19, 19, 19, 18, 18, 18, 18, 18, 17, 17, 17, 17, 17, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9, 10, 10, 9, 9, 9, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8,
+ /* 86.0 */ 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 21, 21, 22, 22, 22, 23, 23, 23, 23, 22, 22, 22, 21, 21, 21, 21, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 22, 22, 22, 22, 22, 22, 22, 21, 21, 21, 21, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 19, 19, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 10, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ /* 87.0 */ 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 18, 18, 18, 18, 18, 18, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 11, 11, 10, 10, 9, 9, 9, 9, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ /* 88.0 */ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 13, 13, 13, 13, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ /* 89.0 */ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ /* 90.0 */ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14
+};
+#endif // HEIGHTGRID_H_INCLUDED_
#include "defs.h"
#include "filterdefs.h"
#include "grtcirc.h"
+#include "interpolate.h"
#include <cstdlib>
#if FILTERS_ENABLED
#define MYNAME "Interpolate filter"
-static char* opt_interval = nullptr;
-static unsigned int interval = 0;
-static char* opt_dist = nullptr;
-static double dist = 0;
-static char* opt_route = nullptr;
-
-static
-arglist_t interpfilt_args[] = {
- {
- "time", &opt_interval, "Time interval in seconds", nullptr,
- ARGTYPE_BEGIN_EXCL | ARGTYPE_BEGIN_REQ | ARGTYPE_INT,
- "0", nullptr, nullptr
- },
- {
- "distance", &opt_dist, "Distance interval in miles or kilometers",
- nullptr, ARGTYPE_END_EXCL | ARGTYPE_END_REQ | ARGTYPE_STRING,
- ARG_NOMINMAX, nullptr
- },
- {
- "route", &opt_route, "Interpolate routes instead", nullptr,
- ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- ARG_TERMINATOR
-};
-
-static void
-interpfilt_process()
+void InterpolateFilter::process()
{
queue* backuproute = nullptr;
queue* elem, *tmp, *elem2, *tmp2;
frac,
&wpt_new->latitude,
&wpt_new->longitude);
- if (altitude1 != unknown_alt && wpt->altitude != unknown_alt)
+ if (altitude1 != unknown_alt && wpt->altitude != unknown_alt) {
wpt_new->altitude = altitude1 + frac * (wpt->altitude - altitude1);
+ }
if (opt_route) {
route_add_wpt(rte_new, wpt_new);
} else {
frac,
&wpt_new->latitude,
&wpt_new->longitude);
- if (altitude1 != unknown_alt && wpt->altitude != unknown_alt)
+ if (altitude1 != unknown_alt && wpt->altitude != unknown_alt) {
wpt_new->altitude = altitude1 + frac * (wpt->altitude - altitude1);
+ }
if (opt_route) {
route_add_wpt(rte_new, wpt_new);
} else {
xfree(backuproute);
}
-static void
-interpfilt_init(const char*)
+void InterpolateFilter::init()
{
char* fm;
}
}
-filter_vecs_t interpolatefilt_vecs = {
- interpfilt_init,
- interpfilt_process,
- nullptr,
- nullptr,
- interpfilt_args
-};
#endif // FILTERS_ENABLED
--- /dev/null
+/*
+ Interpolate filter
+
+ Copyright (C) 2002 Robert Lipe, robertlipe+source@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef INTERPOLATE_H_INCLUDED_
+#define INTERPOLATE_H_INCLUDED_
+
+#include "defs.h" // for ARG_NOMINMAX, arglist_t, ARGTYPE_BEGIN_EXCL, ARG...
+#include "filter.h" // for Filter
+
+#if FILTERS_ENABLED
+
+class InterpolateFilter:public Filter
+{
+public:
+ arglist_t* get_args() override
+ {
+ return args;
+ }
+ void init() override;
+ void process() override;
+
+private:
+ char* opt_interval = nullptr;
+ unsigned int interval = 0;
+ char* opt_dist = nullptr;
+ double dist = 0;
+ char* opt_route = nullptr;
+
+ arglist_t args[4] = {
+ {
+ "time", &opt_interval, "Time interval in seconds", nullptr,
+ ARGTYPE_BEGIN_EXCL | ARGTYPE_BEGIN_REQ | ARGTYPE_INT,
+ "0", nullptr, nullptr
+ },
+ {
+ "distance", &opt_dist, "Distance interval in miles or kilometers",
+ nullptr, ARGTYPE_END_EXCL | ARGTYPE_END_REQ | ARGTYPE_STRING,
+ ARG_NOMINMAX, nullptr
+ },
+ {
+ "route", &opt_route, "Interpolate routes instead", nullptr,
+ ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ ARG_TERMINATOR
+ };
+
+};
+#endif // FILTERS_ENABLED
+#endif // INTERPOLATE_H_INCLUDED_
int argn;
ff_vecs_t* ivecs = nullptr;
ff_vecs_t* ovecs = nullptr;
- filter_vecs_t* fvecs = nullptr;
+ Filter* filter = nullptr;
QString fname;
QString ofname;
const char* ivec_opts = nullptr;
break;
case 'x':
optarg = FETCH_OPTARG;
- fvecs = find_filter_vec(CSTR(optarg), &fvec_opts);
+ filter = find_filter_vec(CSTR(optarg), &fvec_opts);
- if (fvecs) {
- if (fvecs->f_init) {
- fvecs->f_init(fvec_opts);
- }
- fvecs->f_process();
- if (fvecs->f_deinit) {
- fvecs->f_deinit();
- }
- free_filter_vec(fvecs);
+ if (filter) {
+ filter->init();
+ filter->process();
+ filter->deinit();
+ free_filter_vec(filter);
} else {
fatal("Unknown filter '%s'\n",qPrintable(optarg));
}
#include "defs.h"
#include "filterdefs.h"
+#include "nukedata.h"
#if FILTERS_ENABLED
#define MYNAME "nukedata"
-static char* nukewpts, *nuketrks, *nukertes;
-
-static
-arglist_t nuke_args[] = {
- {
- "waypoints", &nukewpts, "Remove all waypoints from data stream",
- "0", ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- } ,
- {
- "tracks", &nuketrks, "Remove all tracks from data stream",
- "0", ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- } ,
- {
- "routes", &nukertes, "Remove all routes from data stream",
- "0", ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- } ,
- ARG_TERMINATOR
-};
-
-static void
-nuke_process(void)
+void NukeDataFilter::process(void)
{
if (*nukewpts != '0') {
waypt_flush_all();
}
}
-filter_vecs_t nuke_vecs = {
- nullptr,
- nuke_process,
- nullptr,
- nullptr,
- nuke_args
-};
-
#endif
--- /dev/null
+/*
+
+ nukedata: remove all (waypoint|tracks|routes) from the stream.
+
+ Copyright (C) 2005 Robert Lipe robertlipe+source@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef NUKEDATA_H_INCLUDED_
+#define NUKEDATA_H_INCLUDED_
+
+#include "defs.h" // for ARGTYPE_BOOL, ARG_NOMINMAX, arglist_t, ARG_TERMI...
+#include "filter.h" // for Filter
+
+#if FILTERS_ENABLED
+
+class NukeDataFilter:public Filter
+{
+public:
+ arglist_t* get_args() override
+ {
+ return args;
+ }
+ void process() override;
+
+private:
+ char* nukewpts;
+ char* nuketrks;
+ char* nukertes;
+
+ arglist_t args[4] = {
+ {
+ "waypoints", &nukewpts, "Remove all waypoints from data stream",
+ "0", ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "tracks", &nuketrks, "Remove all tracks from data stream",
+ "0", ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "routes", &nukertes, "Remove all routes from data stream",
+ "0", ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ ARG_TERMINATOR
+ };
+
+};
+
+#endif
+#endif // NUKEDATA_H_INCLUDED_
*/
#include "defs.h"
#include "filterdefs.h"
+#include "polygon.h"
#include <cstdio>
#if FILTERS_ENABLED
#define MYNAME "Polygon filter"
-static char* polyfileopt = nullptr;
-static char* exclopt = nullptr;
-
/*
* This test for insideness is essentially an odd/even test. The
* traditional (simple) implementation of the odd/even test counts
#define BEGIN_HOR 32
#define UP 64
-typedef struct {
- unsigned short state;
- unsigned short override;
-} extra_data;
-
-static
-arglist_t polygon_args[] = {
- {
- "file", &polyfileopt, "File containing vertices of polygon",
- nullptr, ARGTYPE_FILE | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
- },
- {
- "exclude", &exclopt, "Exclude points inside the polygon",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- ARG_TERMINATOR
-};
-
-static void polytest(double lat1, double lon1,
- double lat2, double lon2,
- double wlat, double wlon,
- unsigned short* state, int first, int last)
+void PolygonFilter::polytest(double lat1, double lon1,
+ double lat2, double lon2,
+ double wlat, double wlon,
+ unsigned short* state, int first, int last)
{
if (lat1 == wlat) {
#define BADVAL 999999
-static void
-polygon_process()
+void PolygonFilter::process()
{
queue* elem, * tmp;
Waypoint* waypointp;
} else if (lat1 != BADVAL && lon1 != BADVAL &&
lat2 != BADVAL && lon2 != BADVAL) {
#if NEWQ
- foreach(Waypoint* waypointp, waypt_list) {
+ foreach (Waypoint* waypointp, waypt_list) {
#else
QUEUE_FOR_EACH(&waypt_head, elem, tmp) {
waypointp = (Waypoint*)elem;
gbfclose(file_in);
#if NEWQ
- foreach(Waypoint* wp, waypt_list) {
+ foreach (Waypoint* wp, waypt_list) {
#else
QUEUE_FOR_EACH(&waypt_head, elem, tmp) {
Waypoint* wp = (Waypoint*) elem;
}
}
-static void
-polygon_init(const char*)
-{
- /* do nothing */
-}
-
-static void
-polygon_deinit()
-{
- /* do nothing */
-}
-
-filter_vecs_t polygon_vecs = {
- polygon_init,
- polygon_process,
- polygon_deinit,
- nullptr,
- polygon_args
-};
#endif // FILTERS_ENABLED
--- /dev/null
+/*
+ Inside/Outside polygon filter
+
+ Copyright (C) 2002 Robert Lipe, robertlipe+source@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef POLYGON_H_INCLUDED_
+#define POLYGON_H_INCLUDED_
+
+#include "defs.h" // for ARG_NOMINMAX, arglist_t, ARGTYPE_BOOL, ARGTYPE_FILE
+#include "filter.h" // for Filter
+
+#if FILTERS_ENABLED
+
+class PolygonFilter:public Filter
+{
+public:
+ arglist_t* get_args() override
+ {
+ return args;
+ }
+ void process() override;
+
+private:
+ char* polyfileopt = nullptr;
+ char* exclopt = nullptr;
+
+ typedef struct {
+ unsigned short state;
+ unsigned short override;
+ } extra_data;
+
+ arglist_t args[3] = {
+ {
+ "file", &polyfileopt, "File containing vertices of polygon",
+ nullptr, ARGTYPE_FILE | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
+ },
+ {
+ "exclude", &exclopt, "Exclude points inside the polygon",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ ARG_TERMINATOR
+ };
+
+ void polytest(double lat1, double lon1,
+ double lat2, double lon2,
+ double wlat, double wlon,
+ unsigned short* state, int first, int last);
+
+};
+#endif // FILTERS_ENABLED
+#endif // POLYGON_H_INCLUDED_
#include "defs.h"
#include "filterdefs.h"
#include "grtcirc.h"
+#include "position.h"
#include <cmath>
#include <cstdlib>
#if FILTERS_ENABLED
-#ifndef M_PI
-# define M_PI 3.14159265358979323846
-#endif
-
-static route_head* cur_rte = nullptr;
-
-static double pos_dist;
-static double max_diff_time;
-static char* distopt = nullptr;
-static char* timeopt = nullptr;
-static char* purge_duplicates = nullptr;
-static int check_time;
-
-typedef struct {
- double distance;
-} extra_data;
-
-static
-arglist_t position_args[] = {
- {
- "distance", &distopt, "Maximum positional distance",
- nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
- },
- {
- "all", &purge_duplicates,
- "Suppress all points close to other points",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "time", &timeopt, "Maximum time in seconds beetween two points",
- nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
- },
- ARG_TERMINATOR
-};
-
-static double
-gc_distance(double lat1, double lon1, double lat2, double lon2)
+double PositionFilter::gc_distance(double lat1, double lon1, double lat2, double lon2)
{
return gcdist(
RAD(lat1),
}
/* tear through a waypoint queue, processing points by distance */
-static void
-position_runqueue(queue* q, int nelems, int qtype)
+void PositionFilter::position_runqueue(queue* q, int nelems, int qtype)
{
queue* elem, * tmp;
Waypoint** comp;
}
}
-static void
-position_process_any_route(const route_head* rh, int type)
+void PositionFilter::position_process_any_route(const route_head* rh, int type)
{
int i = rh->rte_waypt_ct;
}
-static void
-position_process_rte(const route_head* rh)
+void PositionFilter::position_process_rte(const route_head* rh)
{
position_process_any_route(rh, rtedata);
}
-static void
-position_process_trk(const route_head* rh)
+void PositionFilter::position_process_trk(const route_head* rh)
{
position_process_any_route(rh, trkdata);
}
-static void
-position_noop_w(const Waypoint*)
-{
-}
-
-static void
-position_noop_t(const route_head*)
+void PositionFilter::process()
{
-}
+ RteHdFunctor<PositionFilter> position_process_rte_f(this, &PositionFilter::position_process_rte);
+ RteHdFunctor<PositionFilter> position_process_trk_f(this, &PositionFilter::position_process_trk);
-static void position_process()
-{
int i = waypt_count();
if (i) {
position_runqueue(&waypt_head, i, wptdata);
}
- route_disp_all(position_process_rte, position_noop_t, position_noop_w);
- track_disp_all(position_process_trk, position_noop_t, position_noop_w);
+ route_disp_all(position_process_rte_f, nullptr, nullptr);
+ track_disp_all(position_process_trk_f, nullptr, nullptr);
}
-static void
-position_init(const char*)
+void PositionFilter::init()
{
char* fm;
}
}
-static void
-position_deinit()
-{
-}
-
-filter_vecs_t position_vecs = {
- position_init,
- position_process,
- position_deinit,
- nullptr,
- position_args
-};
-
#endif // FILTERS_ENABLED
--- /dev/null
+/*
+ Distance Between Points Filter(s)
+
+ Copyright (C) 2002 Robert Lipe, robertlipe+source@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef POSITION_H_INCLUDED_
+#define POSITION_H_INCLUDED_
+
+#include "defs.h" // for route_head (ptr only), ARG_NOMINMAX, ARGTYPE_FLOAT
+#include "filter.h" // for Filter
+#include "queue.h" // for queue
+
+#if FILTERS_ENABLED
+
+class PositionFilter:public Filter
+{
+public:
+ arglist_t* get_args() override
+ {
+ return args;
+ }
+ void init() override;
+ void process() override;
+
+private:
+ route_head* cur_rte = nullptr;
+
+ double pos_dist;
+ double max_diff_time;
+ char* distopt = nullptr;
+ char* timeopt = nullptr;
+ char* purge_duplicates = nullptr;
+ int check_time;
+
+ typedef struct {
+ double distance;
+ } extra_data;
+
+ arglist_t args[4] = {
+ {
+ "distance", &distopt, "Maximum positional distance",
+ nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
+ },
+ {
+ "all", &purge_duplicates,
+ "Suppress all points close to other points",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "time", &timeopt, "Maximum time in seconds beetween two points",
+ nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
+ },
+ ARG_TERMINATOR
+ };
+
+ double gc_distance(double lat1, double lon1, double lat2, double lon2);
+ void position_runqueue(queue* q, int nelems, int qtype);
+ void position_process_any_route(const route_head* rh, int type);
+ void position_process_rte(const route_head* rh);
+ void position_process_trk(const route_head* rh);
+
+};
+#endif // FILTERS_ENABLED
+#endif // POSITION_H_INCLUDED_
QUEUE_INIT(element);
return element;
}
-
-/*
- * The following sorting code was derived from linked-list mergesort
- * sample code by Simon Tatham, code obtained from:
- * http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html
- * Modified for use with gpsbabel's queues by Paul Fox, October 2006.
- *
- * Original description and copyright messages follow...
- */
-
-/*
- * Demonstration code for sorting a linked list.
- *
- * The algorithm used is Mergesort, because that works really well
- * on linked lists, without requiring the O(N) extra space it needs
- * when you do it on arrays.
- *
- * ...
- */
-
-/*
- * This file is copyright 2001 Simon Tatham.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL SIMON TATHAM BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
- * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-
-void
-sortqueue(queue* qh, int (*cmp)(const queue*, const queue*))
-{
-
- queue* p, *q, *e, *tail, *oldhead, *list;
- int insize, nmerges, psize, qsize, i;
-
- /*
- * Special case: if `list' is empty, we're done.
- */
- if (QUEUE_EMPTY(qh)) {
- return;
- }
-
- /*
- * The algorithm doesn't really want the extra list head
- * element. So remove the list head for now. Put it back later.
- */
-
- list = QUEUE_FIRST(qh);
- dequeue(qh);
-
- insize = 1;
-
- while (true) {
- p = list;
- oldhead = list; /* only used for circular linkage */
- list = nullptr;
- tail = nullptr;
-
- nmerges = 0; /* count number of merges we do in this pass */
-
- while (p) {
- nmerges++; /* there exists a merge to be done */
- /* step `insize' places along from p */
- q = p;
- psize = 0;
- for (i = 0; i < insize; i++) {
- psize++;
- q = (q->next == oldhead ? nullptr : q->next);
- if (!q) {
- break;
- }
- }
-
- /* if q hasn't fallen off end, we have
- * two lists to merge */
- qsize = insize;
-
- /* now we have two lists; merge them */
- while (psize > 0 || (qsize > 0 && q)) {
-
- /* decide whether next element of
- * merge comes from p or q
- */
- if (psize == 0) {
- /* p is empty; e must come from q. */
- e = q;
- q = q->next;
- qsize--;
- if (q == oldhead) {
- q = nullptr;
- }
- } else if (qsize == 0 || !q) {
- /* q is empty; e must come from p. */
- e = p;
- p = p->next;
- psize--;
- if (p == oldhead) {
- p = nullptr;
- }
- } else if (cmp(p,q) <= 0) {
- /* First element of p is
- * lower (or same); e must
- * come from p.
- */
- e = p;
- p = p->next;
- psize--;
- if (p == oldhead) {
- p = nullptr;
- }
- } else {
- /* First element of q is
- * lower; e must come from
- * q.
- */
- e = q;
- q = q->next;
- qsize--;
- if (q == oldhead) {
- q = nullptr;
- }
- }
-
- /* add the next element to the merged list */
- if (tail) {
- tail->next = e;
- } else {
- list = e;
- }
-
- /* Maintain reverse pointers in a
- * doubly linked list. */
- e->prev = tail;
-
- tail = e;
- }
-
- /* now p has stepped `insize' places
- * along, and q has too */
- p = q;
- }
- tail->next = list;
- list->prev = tail;
-
- /* If we have done only one merge, we're finished.
- * Allow for nmerges==0, the empty list case.
- */
- if (nmerges <= 1) {
-
- /* Put the list head back at the start of the list */
- ENQUEUE_TAIL(list, qh);
- return;
-
- }
-
- /* Otherwise repeat, merging lists twice the size */
- insize *= 2;
- }
-}
void enqueue(queue* new_el, queue* old);
queue* dequeue(queue* element);
-void sortqueue(queue* qh, int (*cmp)(const queue*, const queue*));
+//void sortqueue(queue* qh, int (*cmp)(const queue*, const queue*)); /* template */
#define QUEUE_INIT(head) (head)->next = ((head)->prev = head)
#define QUEUE_FIRST(head) ((head)->next)
(tmp) = QUEUE_NEXT(element), \
(element) != (listhead); \
(element) = (tmp))
+
+/*
+ * The following sorting code was derived from linked-list mergesort
+ * sample code by Simon Tatham, code obtained from:
+ * http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html
+ * Modified for use with gpsbabel's queues by Paul Fox, October 2006.
+ *
+ * Original description and copyright messages follow...
+ */
+
+/*
+ * Demonstration code for sorting a linked list.
+ *
+ * The algorithm used is Mergesort, because that works really well
+ * on linked lists, without requiring the O(N) extra space it needs
+ * when you do it on arrays.
+ *
+ * ...
+ */
+
+/*
+ * This file is copyright 2001 Simon Tatham.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL SIMON TATHAM BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+
+template <typename T>
+void
+sortqueue(queue* qh, T cmp)
+{
+
+ queue* p, *q, *e, *tail, *oldhead, *list;
+ int insize, nmerges, psize, qsize, i;
+
+ /*
+ * Special case: if `list' is empty, we're done.
+ */
+ if (QUEUE_EMPTY(qh)) {
+ return;
+ }
+
+ /*
+ * The algorithm doesn't really want the extra list head
+ * element. So remove the list head for now. Put it back later.
+ */
+
+ list = QUEUE_FIRST(qh);
+ dequeue(qh);
+
+ insize = 1;
+
+ while (true) {
+ p = list;
+ oldhead = list; /* only used for circular linkage */
+ list = nullptr;
+ tail = nullptr;
+
+ nmerges = 0; /* count number of merges we do in this pass */
+
+ while (p) {
+ nmerges++; /* there exists a merge to be done */
+ /* step `insize' places along from p */
+ q = p;
+ psize = 0;
+ for (i = 0; i < insize; i++) {
+ psize++;
+ q = (q->next == oldhead ? nullptr : q->next);
+ if (!q) {
+ break;
+ }
+ }
+
+ /* if q hasn't fallen off end, we have
+ * two lists to merge */
+ qsize = insize;
+
+ /* now we have two lists; merge them */
+ while (psize > 0 || (qsize > 0 && q)) {
+
+ /* decide whether next element of
+ * merge comes from p or q
+ */
+ if (psize == 0) {
+ /* p is empty; e must come from q. */
+ e = q;
+ q = q->next;
+ qsize--;
+ if (q == oldhead) {
+ q = nullptr;
+ }
+ } else if (qsize == 0 || !q) {
+ /* q is empty; e must come from p. */
+ e = p;
+ p = p->next;
+ psize--;
+ if (p == oldhead) {
+ p = nullptr;
+ }
+ } else if (cmp(p,q) <= 0) {
+ /* First element of p is
+ * lower (or same); e must
+ * come from p.
+ */
+ e = p;
+ p = p->next;
+ psize--;
+ if (p == oldhead) {
+ p = nullptr;
+ }
+ } else {
+ /* First element of q is
+ * lower; e must come from
+ * q.
+ */
+ e = q;
+ q = q->next;
+ qsize--;
+ if (q == oldhead) {
+ q = nullptr;
+ }
+ }
+
+ /* add the next element to the merged list */
+ if (tail) {
+ tail->next = e;
+ } else {
+ list = e;
+ }
+
+ /* Maintain reverse pointers in a
+ * doubly linked list. */
+ e->prev = tail;
+
+ tail = e;
+ }
+
+ /* now p has stepped `insize' places
+ * along, and q has too */
+ p = q;
+ }
+ tail->next = list;
+ list->prev = tail;
+
+ /* If we have done only one merge, we're finished.
+ * Allow for nmerges==0, the empty list case.
+ */
+ if (nmerges <= 1) {
+
+ /* Put the list head back at the start of the list */
+ ENQUEUE_TAIL(list, qh);
+ return;
+
+ }
+
+ /* Otherwise repeat, merging lists twice the size */
+ insize *= 2;
+ }
+}
#endif // QUEUE_H_INCLUDED_
#include "defs.h"
#include "filterdefs.h"
#include "grtcirc.h"
+#include "radius.h"
#include <cstdio>
#include <cstdlib>
#if FILTERS_ENABLED
-#ifndef M_PI
-# define M_PI 3.14159265358979323846
-#endif
-
-static double pos_dist;
-static char* distopt = nullptr;
-static char* latopt = nullptr;
-static char* lonopt = nullptr;
-static char* exclopt = nullptr;
-static char* nosort = nullptr;
-static char* maxctarg = nullptr;
-static char* routename = nullptr;
-static int maxct;
-
-static Waypoint* home_pos;
-
-typedef struct {
- double distance;
-} extra_data;
-
-static
-arglist_t radius_args[] = {
- {
- "lat", &latopt, "Latitude for center point (D.DDDDD)",
- nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
- },
- {
- "lon", &lonopt, "Longitude for center point (D.DDDDD)",
- nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
- },
- {
- "distance", &distopt, "Maximum distance from center",
- nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
- },
- {
- "exclude", &exclopt, "Exclude points close to center",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "nosort", &nosort, "Inhibit sort by distance to center",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "maxcount", &maxctarg,"Output no more than this number of points",
- nullptr, ARGTYPE_INT, "1", nullptr, nullptr
- },
- {
- "asroute", &routename,"Put resulting waypoints in route of this name",
- nullptr, ARGTYPE_STRING, nullptr, nullptr, nullptr
- },
- ARG_TERMINATOR
-};
-
-static double
-gc_distance(double lat1, double lon1, double lat2, double lon2)
+double RadiusFilter::gc_distance(double lat1, double lon1, double lat2, double lon2)
{
return gcdist(
RAD(lat1),
);
}
-static int
-dist_comp(const void* a, const void* b)
+int RadiusFilter::dist_comp(const void* a, const void* b)
{
const Waypoint* x1 = *(Waypoint**)a;
const Waypoint* x2 = *(Waypoint**)b;
}
-static void
-radius_process()
+void RadiusFilter::process()
{
#if !NEWQ
queue* elem, * tmp;
queue temp_head;
route_head* rte_head = nullptr;
#if NEWQ
- foreach(Waypoint* waypointp, waypt_list) {
+ foreach (Waypoint* waypointp, waypt_list) {
#else
QUEUE_FOR_EACH(&waypt_head, elem, tmp) {
Waypoint* waypointp = (Waypoint*)elem;
*/
#if NEWQ
- foreach(Waypoint* wp, waypt_list) {
+ foreach (Waypoint* wp, waypt_list) {
#else
QUEUE_FOR_EACH(&waypt_head, elem, tmp) {
Waypoint* wp = (Waypoint*) elem;
xfree(comp);
}
-static void
-radius_init(const char*)
+void RadiusFilter::init()
{
char* fm;
}
}
-static void
-radius_deinit()
+void RadiusFilter::deinit()
{
if (home_pos) {
xfree(home_pos);
}
}
-filter_vecs_t radius_vecs = {
- radius_init,
- radius_process,
- radius_deinit,
- nullptr,
- radius_args
-};
#endif // FILTERS_ENABLED
--- /dev/null
+/*
+ Radius Filter
+
+ Copyright (C) 2002 Robert Lipe, robertlipe+source@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef RADIUS_H_INCLUDED_
+#define RADIUS_H_INCLUDED_
+
+#include "defs.h" // for ARG_NOMINMAX, ARGTYPE_FLOAT, ARGTYPE_REQUIRED
+#include "filter.h" // for Filter
+
+#if FILTERS_ENABLED
+
+class RadiusFilter:public Filter
+{
+public:
+ arglist_t* get_args() override
+ {
+ return args;
+ }
+ void init() override;
+ void process() override;
+ void deinit() override;
+
+private:
+ double pos_dist;
+ char* distopt = nullptr;
+ char* latopt = nullptr;
+ char* lonopt = nullptr;
+ char* exclopt = nullptr;
+ char* nosort = nullptr;
+ char* maxctarg = nullptr;
+ char* routename = nullptr;
+ int maxct;
+
+ Waypoint* home_pos;
+
+ typedef struct {
+ double distance;
+ } extra_data;
+
+ arglist_t args[8] = {
+ {
+ "lat", &latopt, "Latitude for center point (D.DDDDD)",
+ nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
+ },
+ {
+ "lon", &lonopt, "Longitude for center point (D.DDDDD)",
+ nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
+ },
+ {
+ "distance", &distopt, "Maximum distance from center",
+ nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
+ },
+ {
+ "exclude", &exclopt, "Exclude points close to center",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "nosort", &nosort, "Inhibit sort by distance to center",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "maxcount", &maxctarg,"Output no more than this number of points",
+ nullptr, ARGTYPE_INT, "1", nullptr, nullptr
+ },
+ {
+ "asroute", &routename,"Put resulting waypoints in route of this name",
+ nullptr, ARGTYPE_STRING, nullptr, nullptr, nullptr
+ },
+ ARG_TERMINATOR
+ };
+
+ double gc_distance(double lat1, double lon1, double lat2, double lon2);
+ static int dist_comp(const void* a, const void* b);
+
+};
+#endif // FILTERS_ENABLED
+#endif // RADIUS_H_INCLUDED_
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx version="1.1" creator="GPSBabel - http://www.gpsbabel.org" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <metadata>
+ <time>2018-06-07T15:44:59.297Z</time>
+ <bounds minlat="45.000000000" minlon="0.000000000" maxlat="47.100000000" maxlon="2.100000000"/>
+ </metadata>
+ <wpt lat="45.000000000" lon="0.000000000">
+ <name>WPT001</name>
+ <cmt>WPT001</cmt>
+ <desc>WPT001</desc>
+ </wpt>
+ <wpt lat="45.100000000" lon="0.100000000">
+ <name>WPT002</name>
+ <cmt>WPT002</cmt>
+ <desc>WPT002</desc>
+ </wpt>
+ <rte>
+ <rtept lat="46.000000000" lon="1.000000000">
+ <name>RPT001</name>
+ </rtept>
+ <rtept lat="46.100000000" lon="1.100000000">
+ <name>RPT002</name>
+ </rtept>
+ </rte>
+ <trk>
+ <trkseg>
+ <trkpt lat="47.000000000" lon="2.000000000"/>
+ <trkpt lat="47.100000000" lon="2.100000000"/>
+ </trkseg>
+ </trk>
+</gpx>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx version="1.1" creator="GPSBabel - http://www.gpsbabel.org" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <metadata>
+ <time>1970-01-01T00:00:00Z</time>
+ <bounds minlat="0.000000000" minlon="45.000000000" maxlat="2.100000000" maxlon="47.100000000"/>
+ </metadata>
+ <wpt lat="0.000000000" lon="45.000000000">
+ <name>WPT001</name>
+ <cmt>WPT001</cmt>
+ <desc>WPT001</desc>
+ </wpt>
+ <wpt lat="0.100000000" lon="45.100000000">
+ <name>WPT002</name>
+ <cmt>WPT002</cmt>
+ <desc>WPT002</desc>
+ </wpt>
+ <rte>
+ <rtept lat="1.000000000" lon="46.000000000">
+ <name>RPT001</name>
+ </rtept>
+ <rtept lat="1.100000000" lon="46.100000000">
+ <name>RPT002</name>
+ </rtept>
+ </rte>
+ <trk>
+ <trkseg>
+ <trkpt lat="2.000000000" lon="47.000000000"/>
+ <trkpt lat="2.100000000" lon="47.100000000"/>
+ </trkseg>
+ </trk>
+</gpx>
*/
#include "defs.h"
#include "filterdefs.h"
+#include "reverse_route.h"
#if FILTERS_ENABLED
#define MYNAME "Route reversal filter"
-static int prev_new_trkseg;
-
-static
-arglist_t reverse_route_args[] = {
- ARG_TERMINATOR
-};
-
/*
* reverse_route_wpt fixes up the waypoint flag new_trkseg
*/
-static void reverse_route_wpt(const Waypoint* waypointp)
+void ReverseRouteFilter::reverse_route_wpt(const Waypoint* waypointp)
{
/* Cast away const-ness */
prev_new_trkseg = curr_new_trkseg;
}
-static void
-reverse_route_head(const route_head* rte)
+void ReverseRouteFilter::reverse_route_head(const route_head* rte)
{
route_reverse(rte);
prev_new_trkseg = 1;
}
-static void
-reverse_route_process()
+void ReverseRouteFilter::process()
{
- track_disp_all(reverse_route_head, nullptr, reverse_route_wpt);
- route_disp_all(reverse_route_head, nullptr, nullptr);
+ WayptFunctor<ReverseRouteFilter> reverse_route_wpt_f(this, &ReverseRouteFilter::reverse_route_wpt);
+ RteHdFunctor<ReverseRouteFilter> reverse_route_head_f(this, &ReverseRouteFilter::reverse_route_head);
+
+ track_disp_all(reverse_route_head_f, nullptr, reverse_route_wpt_f);
+ route_disp_all(reverse_route_head_f, nullptr, nullptr);
}
-static void
-reverse_route_init(const char*)
+void ReverseRouteFilter::init()
{
switch (global_opts.objective) {
case rtedata:
}
}
-static void
-reverse_route_deinit()
-{
- /* do nothing */
-}
-
-filter_vecs_t reverse_route_vecs = {
- reverse_route_init,
- reverse_route_process,
- reverse_route_deinit,
- nullptr,
- reverse_route_args
-};
#endif
--- /dev/null
+/*
+ Route reversal filter.
+
+ Copyright (C) 2003 Robert Lipe, robertlipe+source@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+#include "defs.h" // for Waypoint (ptr only), arglist_t, route_head (ptr ...
+#include "filter.h" // for Filter
+
+#if FILTERS_ENABLED
+
+class ReverseRouteFilter:public Filter
+{
+public:
+ arglist_t* get_args() override
+ {
+ return args;
+ }
+ void init() override;
+ void process() override;
+
+private:
+ int prev_new_trkseg;
+ arglist_t args[1] = {
+ ARG_TERMINATOR
+ };
+
+ void reverse_route_wpt(const Waypoint* waypointp);
+ void reverse_route_head(const route_head* rte);
+
+};
+#endif
#include "session.h"
#include <cstdio>
-static queue my_route_head;
-static queue my_track_head;
+queue my_route_head;
+queue my_track_head;
static int rte_head_ct;
static int rte_waypts;
static int trk_head_ct;
}
void
-route_disp(const route_head* rh, waypt_cb cb)
+route_disp(const route_head* rh, std::nullptr_t /* wc */)
{
- queue* elem, *tmp;
- if (!cb) {
- return;
- }
- QUEUE_FOR_EACH(&rh->waypoint_list, elem, tmp) {
- Waypoint* waypointp;
- waypointp = (Waypoint*) elem;
- (*cb)(waypointp);
- }
-
+// wc == nullptr
}
void
}
}
-static void
-common_disp_all(queue* qh, route_hdr rh, route_trl rt, waypt_cb wc)
-{
- queue* elem, *tmp;
- QUEUE_FOR_EACH(qh, elem, tmp) {
- const route_head* rhp;
- rhp = (route_head*) elem;
- if (rh) {
- (*rh)(rhp);
- }
- route_disp(rhp, wc);
- if (rt) {
- (*rt)(rhp);
- }
- }
-}
-
static void
common_disp_session(const session_t* se, queue* qh, route_hdr rh, route_trl rt, waypt_cb wc)
{
}
}
-void
-route_disp_all(route_hdr rh, route_trl rt, waypt_cb wc)
-{
- common_disp_all(&my_route_head, rh, rt, wc);
-}
-
void
route_disp_session(const session_t* se, route_hdr rh, route_trl rt, waypt_cb wc)
{
common_disp_session(se, &my_route_head, rh, rt, wc);
}
-void
-track_disp_all(route_hdr rh, route_trl rt, waypt_cb wc)
-{
- common_disp_all(&my_track_head, rh, rt, wc);
-}
-
void
track_disp_session(const session_t* se, route_hdr rh, route_trl rt, waypt_cb wc)
{
#include "defs.h"
#include "filterdefs.h"
#include "grtcirc.h"
+#include "smplrout.h"
#include <cstdlib>
+#if FILTERS_ENABLED
#define MYNAME "simplify"
#define sqr(a) ((a)*(a))
-static int count = 0;
-static double totalerror = 0;
-static double error = 0;
-
-static char* countopt;
-static char* erroropt;
-static char* xteopt;
-static char* lenopt;
-static char* relopt;
-static void (*waypt_del_fnp)(route_head* rte, Waypoint* wpt);
-
-static
-arglist_t routesimple_args[] = {
- {
- "count", &countopt, "Maximum number of points in route",
- nullptr, ARGTYPE_INT | ARGTYPE_BEGIN_REQ | ARGTYPE_BEGIN_EXCL, "1", nullptr, nullptr
- },
- {
- "error", &erroropt, "Maximum error", nullptr,
- ARGTYPE_STRING | ARGTYPE_END_REQ | ARGTYPE_END_EXCL, "0", nullptr, nullptr
- },
- {
- "crosstrack", &xteopt, "Use cross-track error (default)", nullptr,
- ARGTYPE_BOOL | ARGTYPE_BEGIN_EXCL, ARG_NOMINMAX, nullptr
- },
- {
- "length", &lenopt, "Use arclength error", nullptr,
- ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "relative", &relopt, "Use relative error", nullptr,
- ARGTYPE_BOOL | ARGTYPE_END_EXCL, ARG_NOMINMAX, nullptr
- },
- ARG_TERMINATOR
-};
-
-struct xte_intermed;
-
-struct xte {
- double distance;
- int ordinal;
- struct xte_intermed* intermed;
-};
-
-struct xte_intermed {
- struct xte* xte_rec;
- struct xte_intermed* next;
- struct xte_intermed* prev;
- const Waypoint* wpt;
-};
-
-static void
-free_xte(struct xte* xte_rec)
+void SimplifyRouteFilter::free_xte(struct xte* xte_rec)
{
xfree(xte_rec->intermed);
}
#define HUGEVAL 2000000000
-static struct xte_intermed* tmpprev = nullptr;
-static int xte_count = 0;
-static const route_head* cur_rte = nullptr;
-static struct xte* xte_recs = nullptr;
-
-static void
-routesimple_waypt_pr(const Waypoint* wpt)
+void SimplifyRouteFilter::routesimple_waypt_pr(const Waypoint* wpt)
{
if (!cur_rte) {
return;
xte_count++;
}
-static void
-compute_xte(struct xte* xte_rec)
+void SimplifyRouteFilter::compute_xte(struct xte* xte_rec)
{
const Waypoint* wpt3 = xte_rec->intermed->wpt;
const Waypoint* wpt1 = nullptr;
}
}
-
-static int
-compare_xte(const void* a, const void* b)
+int SimplifyRouteFilter::compare_xte(const void* a, const void* b)
{
double distdiff = ((struct xte*)a)->distance -
((struct xte*)b)->distance;
return 0;
}
-static void
-routesimple_head(const route_head* rte)
+void SimplifyRouteFilter::routesimple_head(const route_head* rte)
{
cur_rte = nullptr;
/* build array of XTE/wpt xref records */
}
-static void
-shuffle_xte(struct xte* xte_rec)
+void SimplifyRouteFilter::shuffle_xte(struct xte* xte_rec)
{
struct xte tmp_xte;
while (xte_rec > xte_recs && compare_xte(xte_rec, xte_rec-1) < 0) {
}
}
-static void
-routesimple_tail(const route_head* rte)
+void SimplifyRouteFilter::routesimple_tail(const route_head* rte)
{
int i;
if (!cur_rte) {
xte_recs[i].intermed->xte_rec = xte_recs+i;
}
// Ensure totalerror starts with the distance between first and second points
- // and not the zero-init. From a June 25, 2014 thread titled "Simplify
+ // and not the zero-init. From a June 25, 2014 thread titled "Simplify
// Filter: GPSBabel removes one trackpoint..." I never could repro it it
- // with the sample data, so there is no automated test case, but Steve's
+ // with the sample data, so there is no automated test case, but Steve's
// fix is "obviously" right here.
if (xte_count >= 1) {
totalerror = xte_recs[xte_count-1].distance;
xfree(xte_recs);
}
-static void
-routesimple_process()
+void SimplifyRouteFilter::process()
{
+ WayptFunctor<SimplifyRouteFilter> routesimple_waypt_pr_f(this, &SimplifyRouteFilter::routesimple_waypt_pr);
+ RteHdFunctor<SimplifyRouteFilter> routesimple_head_f(this, &SimplifyRouteFilter::routesimple_head);
+ RteHdFunctor<SimplifyRouteFilter> routesimple_tail_f(this, &SimplifyRouteFilter::routesimple_tail);
+
waypt_del_fnp = route_del_wpt;
- route_disp_all(routesimple_head, routesimple_tail, routesimple_waypt_pr);
+ route_disp_all(routesimple_head_f, routesimple_tail_f, routesimple_waypt_pr_f);
waypt_del_fnp = track_del_wpt;
- track_disp_all(routesimple_head, routesimple_tail, routesimple_waypt_pr);
+ track_disp_all(routesimple_head_f, routesimple_tail_f, routesimple_waypt_pr_f);
}
-static void
-routesimple_init(const char*)
+void SimplifyRouteFilter::init()
{
count = 0;
}
}
-static void
-routesimple_deinit()
-{
- /* do nothing */
-}
-
-filter_vecs_t routesimple_vecs = {
- routesimple_init,
- routesimple_process,
- routesimple_deinit,
- nullptr,
- routesimple_args
-};
+#endif // FILTERS_ENABLED
--- /dev/null
+/*
+ Route / track simplification filter
+
+ Copyright (C) 2002-2014 Robert Lipe, robertlipe+source@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+/* The following comments are from an email I wrote to Paul Fox in November
+ * 2005 in an attempt to explain how the cross track error minimization method
+ * works (RLP 2005):
+ *
+ * It's pretty simple, really: for each triplet of vertices A-B-C, we compute
+ * how much cross-track error we'd introduce by going straight from A to C
+ * (the maximum cross-track error for that segment is the height of the
+ * triangle ABC, measured between vertex B and edge AC.) If we need to remove
+ * 40 points, we just sort the points by that metric and remove the 40
+ * smallest ones.
+ *
+ * It's actually a little more complicated than that, because removing a
+ * point changes the result for its two nearest neighbors. When we remove
+ * one, we recompute the neighbors and then sort them back into the list
+ * at their new locations.
+ *
+ * As you can see, this hasn't been shown to be an optimal algorithm. After
+ * all, removing one high-xte point might create two very low-xte neighbors
+ * that more than make up for the high xte of the original point. I believe
+ * the optimal algorithm would be NP-complete, but I haven't proven it. This
+ * is really more of a heuristic than anything, but it seems to work well for
+ * the routes I've fed it.
+ *
+ * Not in that email was an explanation of how the pathlength-based calculation
+ * works: instead of computing the height of the triangle, we just compute
+ * the difference in pathlength from taking the direct route. This case,
+ * too, is only a heuristic, as it's possible that a different combination or
+ * order of point removals could lead to a smaller number of points with less
+ * reduction in path length. In the case of pathlength, error is cumulative.
+*/
+
+/*
+ History:
+
+ 2008/08/20: added "relative" option, (Carsten Allefeld, carsten.allefeld@googlemail.com)
+*/
+
+#ifndef SMPLROUT_H_INCLUDED_
+#define SMPLROUT_H_INCLUDED_
+
+#include "defs.h" // for route_head (ptr only), Waypoint (ptr only), ARGT...
+#include "filter.h" // for Filter
+
+#if FILTERS_ENABLED
+
+class SimplifyRouteFilter:public Filter
+{
+public:
+ arglist_t* get_args() override
+ {
+ return args;
+ }
+ void init() override;
+ void process() override;
+
+private:
+
+ int count = 0;
+ double totalerror = 0;
+ double error = 0;
+
+ char* countopt;
+ char* erroropt;
+ char* xteopt;
+ char* lenopt;
+ char* relopt;
+ void (*waypt_del_fnp)(route_head* rte, Waypoint* wpt);
+
+ arglist_t args[6] = {
+ {
+ "count", &countopt, "Maximum number of points in route",
+ nullptr, ARGTYPE_INT | ARGTYPE_BEGIN_REQ | ARGTYPE_BEGIN_EXCL, "1", nullptr, nullptr
+ },
+ {
+ "error", &erroropt, "Maximum error", nullptr,
+ ARGTYPE_STRING | ARGTYPE_END_REQ | ARGTYPE_END_EXCL, "0", nullptr, nullptr
+ },
+ {
+ "crosstrack", &xteopt, "Use cross-track error (default)", nullptr,
+ ARGTYPE_BOOL | ARGTYPE_BEGIN_EXCL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "length", &lenopt, "Use arclength error", nullptr,
+ ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "relative", &relopt, "Use relative error", nullptr,
+ ARGTYPE_BOOL | ARGTYPE_END_EXCL, ARG_NOMINMAX, nullptr
+ },
+ ARG_TERMINATOR
+ };
+
+ struct xte_intermed;
+
+ struct xte {
+ double distance;
+ int ordinal;
+ struct xte_intermed* intermed;
+ };
+
+ struct xte_intermed {
+ struct xte* xte_rec;
+ struct xte_intermed* next;
+ struct xte_intermed* prev;
+ const Waypoint* wpt;
+ };
+
+ void free_xte(struct xte* xte_rec);
+
+ struct xte_intermed* tmpprev = nullptr;
+ int xte_count = 0;
+ const route_head* cur_rte = nullptr;
+ struct xte* xte_recs = nullptr;
+
+ void routesimple_waypt_pr(const Waypoint* wpt);
+ void compute_xte(struct xte* xte_rec);
+ static int compare_xte(const void* a, const void* b);
+ void routesimple_head(const route_head* rte);
+ void shuffle_xte(struct xte* xte_rec);
+ void routesimple_tail(const route_head* rte);
+
+};
+
+#endif // FILTERS_ENABLED
+#endif // SMPLROUT_H_INCLUDED_
*/
#include "defs.h"
#include "filterdefs.h"
+#include "sort.h"
#include <cstdlib>
#if FILTERS_ENABLED
-typedef enum {
- sm_unknown = 0,
- sm_gcid,
- sm_shortname,
- sm_description,
- sm_time
-} sort_mode_;
-
-static sort_mode_ sort_mode = sm_shortname; /* How are we sorting these? */
-
-static char* opt_sm_gcid, *opt_sm_shortname, *opt_sm_description, *opt_sm_time;
-
-static
-arglist_t sort_args[] = {
- {
- "gcid", &opt_sm_gcid, "Sort by numeric geocache ID",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "shortname", &opt_sm_shortname, "Sort by waypoint short name",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "description", &opt_sm_description, "Sort by waypoint description",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "time", &opt_sm_time, "Sort by time",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- ARG_TERMINATOR
-};
-
-static int
-sort_comp(const queue* a, const queue* b)
+int SortFilter::sort_comp(const queue* a, const queue* b)
{
const Waypoint* x1 = (Waypoint*)a;
const Waypoint* x2 = (Waypoint*)b;
}
}
-static void
-sort_process()
+int SortFilter::SortCompFunctor::operator()(const queue* a, const queue* b)
{
+ return that->sort_comp(a, b);
+}
+
+void SortFilter::process()
+{
+ SortCompFunctor sort_comp(*this);
+
sortqueue(&waypt_head, sort_comp);
}
-static void
-sort_init(const char*)
+void SortFilter::init()
{
if (opt_sm_gcid) {
sort_mode = sm_gcid;
}
}
-filter_vecs_t sort_vecs = {
- sort_init,
- sort_process,
- nullptr,
- nullptr,
- sort_args
-};
#endif // FILTERS_ENABLED
--- /dev/null
+/*
+ Arbitrary Sorting Filter(s)
+
+ Copyright (C) 2004 Robert Lipe, robertlipe+source@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef SORT_H_INCLUDED_
+#define SORT_H_INCLUDED_
+
+#include "defs.h" // for ARGTYPE_BOOL, ARG_NOMINMAX, arglist_t, ARG_TERMI...
+#include "filter.h" // for Filter
+#include "queue.h" // for queue
+
+#if FILTERS_ENABLED
+
+class SortFilter:public Filter
+{
+public:
+ arglist_t* get_args() override
+ {
+ return args;
+ }
+ void init() override;
+ void process() override;
+
+private:
+ typedef enum {
+ sm_unknown = 0,
+ sm_gcid,
+ sm_shortname,
+ sm_description,
+ sm_time
+ } sort_mode_;
+
+ sort_mode_ sort_mode = sm_shortname; /* How are we sorting these? */
+
+ char* opt_sm_gcid, *opt_sm_shortname, *opt_sm_description, *opt_sm_time;
+
+ arglist_t args[5] = {
+ {
+ "gcid", &opt_sm_gcid, "Sort by numeric geocache ID",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "shortname", &opt_sm_shortname, "Sort by waypoint short name",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "description", &opt_sm_description, "Sort by waypoint description",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "time", &opt_sm_time, "Sort by time",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ ARG_TERMINATOR
+ };
+
+ int sort_comp(const queue* a, const queue* b);
+
+ class SortCompFunctor
+ {
+ public:
+ SortCompFunctor(SortFilter& obj) : that(&obj) {}
+ int operator()(const queue* a, const queue* b);
+
+ private:
+ SortFilter* that;
+ };
+
+};
+#endif // FILTERS_ENABLED
+#endif // SORT_H_INCLUDED_
*/
+#ifndef DATETIME_H_INCLUDED_
+#define DATETIME_H_INCLUDED_
#include <ctime>
};
} // namespace gpsbabel
+
+#endif // DATETIME_H_INCLUDED_
#include "defs.h"
#include "filterdefs.h"
+#include "stackfilter.h"
#include <cstdlib>
#if FILTERS_ENABLED
#define MYNAME "Stack filter"
-static char* opt_push = nullptr;
-static char* opt_copy = nullptr;
-static char* opt_pop = nullptr;
-static char* opt_append = nullptr;
-static char* opt_discard = nullptr;
-static char* opt_replace = nullptr;
-static char* opt_swap = nullptr;
-static char* opt_depth = nullptr;
-static char* nowarn = nullptr;
-static int warnings_enabled = 1;
-static int swapdepth = 0;
-
-static
-arglist_t stackfilt_args[] = {
- {
- "push", &opt_push, "Push waypoint list onto stack", nullptr,
- ARGTYPE_BEGIN_EXCL | ARGTYPE_BEGIN_REQ | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "pop", &opt_pop, "Pop waypoint list from stack", nullptr,
- ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "swap", &opt_swap, "Swap waypoint list with <depth> item on stack",
- nullptr, ARGTYPE_END_EXCL | ARGTYPE_END_REQ | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "copy", &opt_copy, "(push) Copy waypoint list", nullptr,
- ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "append", &opt_append, "(pop) Append list", nullptr,
- ARGTYPE_BEGIN_EXCL | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "discard", &opt_discard, "(pop) Discard top of stack",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "replace", &opt_replace, "(pop) Replace list (default)",
- nullptr, ARGTYPE_END_EXCL | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "depth", &opt_depth, "(swap) Item to use (default=1)",
- nullptr, ARGTYPE_INT, "0", nullptr, nullptr
- },
- {
- "nowarn", &nowarn, "Suppress cleanup warning", nullptr,
- ARGTYPE_BOOL | ARGTYPE_HIDDEN, ARG_NOMINMAX, nullptr
- },
- ARG_TERMINATOR
-};
-
-static struct stack_elt {
- queue waypts;
- queue routes;
- queue tracks;
- unsigned int waypt_ct;
- int route_count;
- int track_count;
- struct stack_elt* next;
-}* stack = nullptr;
-
-
-static void
-stackfilt_process()
+void StackFilter::process()
{
struct stack_elt* tmp_elt = nullptr;
queue* elem = nullptr;
}
}
-static void
-stackfilt_init(const char*)
+void StackFilter::init()
{
int invalid = 0;
}
-static void
-stackfilt_deinit()
+void StackFilter::deinit()
{
swapdepth = 0;
}
-static void
-stackfilt_exit()
+void StackFilter::exit()
{
struct stack_elt* tmp_elt = nullptr;
}
}
-filter_vecs_t stackfilt_vecs = {
- stackfilt_init,
- stackfilt_process,
- stackfilt_deinit,
- stackfilt_exit,
- stackfilt_args
-};
-
#endif // FILTERS_ENABLED
--- /dev/null
+/*
+ Stack filter
+
+ Copyright (C) 2002 Robert Lipe, robertlipe+source@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef STACKFILTER_H_INCLUDED_
+#define STACKFILTER_H_INCLUDED_
+
+#include "defs.h" // for ARGTYPE_BOOL, ARG_NOMINMAX, ARGTYPE_BEGIN_EXCL
+#include "filter.h" // for Filter
+#include "queue.h" // for queue
+
+#if FILTERS_ENABLED
+
+class StackFilter:public Filter
+{
+public:
+ arglist_t* get_args() override
+ {
+ return args;
+ }
+ void init() override;
+ void process() override;
+ void deinit() override;
+ void exit() override;
+
+private:
+ char* opt_push = nullptr;
+ char* opt_copy = nullptr;
+ char* opt_pop = nullptr;
+ char* opt_append = nullptr;
+ char* opt_discard = nullptr;
+ char* opt_replace = nullptr;
+ char* opt_swap = nullptr;
+ char* opt_depth = nullptr;
+ char* nowarn = nullptr;
+ int warnings_enabled = 1;
+ int swapdepth = 0;
+
+ arglist_t args[10] = {
+ {
+ "push", &opt_push, "Push waypoint list onto stack", nullptr,
+ ARGTYPE_BEGIN_EXCL | ARGTYPE_BEGIN_REQ | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "pop", &opt_pop, "Pop waypoint list from stack", nullptr,
+ ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "swap", &opt_swap, "Swap waypoint list with <depth> item on stack",
+ nullptr, ARGTYPE_END_EXCL | ARGTYPE_END_REQ | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "copy", &opt_copy, "(push) Copy waypoint list", nullptr,
+ ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "append", &opt_append, "(pop) Append list", nullptr,
+ ARGTYPE_BEGIN_EXCL | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "discard", &opt_discard, "(pop) Discard top of stack",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "replace", &opt_replace, "(pop) Replace list (default)",
+ nullptr, ARGTYPE_END_EXCL | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "depth", &opt_depth, "(swap) Item to use (default=1)",
+ nullptr, ARGTYPE_INT, "0", nullptr, nullptr
+ },
+ {
+ "nowarn", &nowarn, "Suppress cleanup warning", nullptr,
+ ARGTYPE_BOOL | ARGTYPE_HIDDEN, ARG_NOMINMAX, nullptr
+ },
+ ARG_TERMINATOR
+ };
+
+ struct stack_elt {
+ queue waypts;
+ queue routes;
+ queue tracks;
+ unsigned int waypt_ct;
+ int route_count;
+ int track_count;
+ struct stack_elt* next;
+ }* stack = nullptr;
+
+};
+#endif // FILTERS_ENABLED
+#endif // STACKFILTER_H_INCLUDED_
#include "defs.h"
#include "filterdefs.h"
+#include "swapdata.h"
#define MYNAME "swapdata"
#if FILTERS_ENABLED
-static
-arglist_t swapdata_args[] = {
- ARG_TERMINATOR
-};
-
-static void
-swapdata_cb(const Waypoint* ref)
+void SwapDataFilter::swapdata_cb(const Waypoint* ref)
{
Waypoint* wpt = (Waypoint*)ref;
double x;
* %%% global callbacks called by gpsbabel main process %%% *
*******************************************************************************/
-static void
-swapdata_process(void) /* this procedure must be present in vecs */
+void SwapDataFilter::process(void) /* this procedure must be present in vecs */
{
- waypt_disp_all(swapdata_cb);
- route_disp_all(nullptr, nullptr, swapdata_cb);
- track_disp_all(nullptr, nullptr, swapdata_cb);
-}
+ WayptFunctor<SwapDataFilter> swapdata_cb_f(this, &SwapDataFilter::swapdata_cb);
-/*******************************************************************************/
-
-filter_vecs_t swapdata_vecs = {
- nullptr,
- swapdata_process,
- nullptr,
- nullptr,
- swapdata_args
-};
+ waypt_disp_all(swapdata_cb_f);
+ route_disp_all(nullptr, nullptr, swapdata_cb_f);
+ track_disp_all(nullptr, nullptr, swapdata_cb_f);
+}
-/*******************************************************************************/
#endif // FILTERS_ENABLED
--- /dev/null
+/*
+
+ Swap data filter
+
+ Copyright (C) 2008 Olaf Klein, o.b.klein@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef SWAPDATA_H_INCLUDED_
+#define SWAPDATA_H_INCLUDED_
+
+#include "defs.h" // for Waypoint (ptr only), arglist_t, ARG_TERMINATOR
+#include "filter.h" // for Filter
+
+#if FILTERS_ENABLED
+
+class SwapDataFilter:public Filter
+{
+public:
+ arglist_t* get_args() override
+ {
+ return args;
+ }
+ void process() override;
+
+private:
+ arglist_t args[1] = {
+ ARG_TERMINATOR
+ };
+
+ void swapdata_cb(const Waypoint* ref);
+
+};
+
+#endif // FILTERS_ENABLED
+#endif // SWAPDATA_H_INCLUDED_
--- /dev/null
+
+# swapdata filter
+rm -f ${TMPDIR}/gl.gpx ${TMPDIR}/gpx.wpt
+gpsbabel -i gpx -f ${REFERENCE}/swapdata.gpx -x swap -o gpx -F ${TMPDIR}/swapdata~gpx.gpx
+compare ${REFERENCE}/swapdata~gpx.gpx ${TMPDIR}/swapdata~gpx.gpx
+
#!/bin/bash
#
-# this is used to generate height.h
+# this is used to generate heightgrid.h
# which is used by height.c to compute the EMG96 geoid height
# relative to the WGS84 ellipsoid.
# It requires the GeographicLib utility GeoidEval.
#include "filterdefs.h"
#include "grtcirc.h"
#include "strptime.h"
+#include "trackfilter.h"
#include "xmlgeneric.h"
#include <QtCore/QRegExp>
#include <QtCore/QXmlStreamAttributes>
#if FILTERS_ENABLED || MINIMAL_FILTERS
#define MYNAME "trackfilter"
-#define TRACKFILTER_PACK_OPTION "pack"
-#define TRACKFILTER_SPLIT_OPTION "split"
-#define TRACKFILTER_SDIST_OPTION "sdistance"
-#define TRACKFILTER_TITLE_OPTION "title"
-#define TRACKFILTER_MERGE_OPTION "merge"
-#define TRACKFILTER_NAME_OPTION "name"
-#define TRACKFILTER_STOP_OPTION "stop"
-#define TRACKFILTER_START_OPTION "start"
-#define TRACKFILTER_MOVE_OPTION "move"
-#define TRACKFILTER_FIX_OPTION "fix"
-#define TRACKFILTER_COURSE_OPTION "course"
-#define TRACKFILTER_SPEED_OPTION "speed"
-#define TRACKFILTER_SEG2TRK_OPTION "seg2trk"
-#define TRACKFILTER_TRK2SEG_OPTION "trk2seg"
-#define TRACKFILTER_SEGMENT_OPTION "segment"
-#define TRACKFILTER_FAKETIME_OPTION "faketime"
-#define TRACKFILTER_DISCARD_OPTION "discard"
-#define TRACKFILTER_MINPOINTS_OPTION "minimum_points"
-
#undef TRACKF_DBG
-static char* opt_merge = nullptr;
-static char* opt_pack = nullptr;
-static char* opt_split = nullptr;
-static char* opt_sdistance = nullptr;
-static char* opt_move = nullptr;
-static char* opt_title = nullptr;
-static char* opt_start = nullptr;
-static char* opt_stop = nullptr;
-static char* opt_fix = nullptr;
-static char* opt_course = nullptr;
-static char* opt_speed = nullptr;
-static char* opt_name = nullptr;
-static char* opt_seg2trk = nullptr;
-static char* opt_trk2seg = nullptr;
-static char* opt_segment = nullptr;
-static char* opt_faketime = nullptr;
-static char* opt_discard = nullptr;
-static char* opt_minpoints = nullptr;
-
-static
-arglist_t trackfilter_args[] = {
- {
- TRACKFILTER_MOVE_OPTION, &opt_move,
- "Correct trackpoint timestamps by a delta", nullptr, ARGTYPE_STRING,
- ARG_NOMINMAX, nullptr
- },
- {
- TRACKFILTER_PACK_OPTION, &opt_pack,
- "Pack all tracks into one", nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- TRACKFILTER_SPLIT_OPTION, &opt_split,
- "Split by date or time interval (see README)", nullptr,
- ARGTYPE_STRING, ARG_NOMINMAX, nullptr
- },
- {
- TRACKFILTER_SDIST_OPTION, &opt_sdistance,
- "Split by distance", nullptr,
- ARGTYPE_STRING, ARG_NOMINMAX, nullptr
- },
- {
- TRACKFILTER_MERGE_OPTION, &opt_merge,
- "Merge multiple tracks for the same way", nullptr, ARGTYPE_STRING,
- ARG_NOMINMAX, nullptr
- },
- {
- TRACKFILTER_NAME_OPTION, &opt_name,
- "Use only track(s) where title matches given name", nullptr, ARGTYPE_STRING,
- ARG_NOMINMAX, nullptr
- },
- {
- TRACKFILTER_START_OPTION, &opt_start,
- "Use only track points after this timestamp", nullptr, ARGTYPE_INT,
- ARG_NOMINMAX, nullptr
- },
- {
- TRACKFILTER_STOP_OPTION, &opt_stop,
- "Use only track points before this timestamp", nullptr, ARGTYPE_INT,
- ARG_NOMINMAX, nullptr
- },
- {
- TRACKFILTER_TITLE_OPTION, &opt_title,
- "Basic title for new track(s)", nullptr, ARGTYPE_STRING, ARG_NOMINMAX, nullptr
- },
- {
- TRACKFILTER_FIX_OPTION, &opt_fix,
- "Synthesize GPS fixes (PPS, DGPS, 3D, 2D, NONE)", nullptr,
- ARGTYPE_STRING, ARG_NOMINMAX, nullptr
- },
- {
- TRACKFILTER_COURSE_OPTION, &opt_course, "Synthesize course",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- TRACKFILTER_SPEED_OPTION, &opt_speed, "Synthesize speed",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- TRACKFILTER_SEG2TRK_OPTION, &opt_seg2trk,
- "Split track at segment boundaries into multiple tracks",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- TRACKFILTER_TRK2SEG_OPTION, &opt_trk2seg,
- "Merge tracks inserting segment separators at boundaries",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- TRACKFILTER_SEGMENT_OPTION, &opt_segment,
- "segment tracks with abnormally long gaps",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- TRACKFILTER_FAKETIME_OPTION, &opt_faketime,
- "Add specified timestamp to each trackpoint",
- nullptr, ARGTYPE_STRING, ARG_NOMINMAX, nullptr
- },
- {
- TRACKFILTER_DISCARD_OPTION, &opt_discard,
- "Discard track points without timestamps during merge",
- nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- TRACKFILTER_MINPOINTS_OPTION, &opt_minpoints,
- "Discard tracks with fewer than these points",
- nullptr, ARGTYPE_INT, "0", "50", nullptr
- },
- ARG_TERMINATOR
-};
-
-
-typedef struct trkflt_s {
- route_head* track;
- QDateTime first_time;
- QDateTime last_time;
-} trkflt_t;
-
-static trkflt_t* track_list = nullptr;
-static int track_ct = 0;
-static int track_pts = 0;
-static int timeless_pts = 0;
-static int opt_interval = 0;
-static int opt_distance = 0;
-static char need_time; /* initialized within trackfilter_init */
-
/*******************************************************************************
* helpers
*******************************************************************************/
-static int
-trackfilter_opt_count()
+int TrackFilter::trackfilter_opt_count()
{
int res = 0;
- arglist_t* a = trackfilter_args;
+ arglist_t* a = args;
while (a->argstring) {
if (*a->argval != nullptr) {
return res;
}
-static int
-trackfilter_parse_time_opt(const char* arg)
+int TrackFilter::trackfilter_parse_time_opt(const char* arg)
{
time_t t0, t1;
int sign = 1;
return t0;
}
-static int
-trackfilter_init_qsort_cb(const void* a, const void* b)
+int TrackFilter::trackfilter_init_qsort_cb(const void* a, const void* b)
{
const trkflt_t* ra = (const trkflt_t*) a;
const trkflt_t* rb = (const trkflt_t*) b;
return -1;
}
-static int
-trackfilter_merge_qsort_cb(const void* a, const void* b)
+int TrackFilter::trackfilter_merge_qsort_cb(const void* a, const void* b)
{
const Waypoint* wa = *(Waypoint**)a;
const Waypoint* wb = *(Waypoint**)b;
return -1;
}
-static fix_type
-trackfilter_parse_fix(int* nsats)
+fix_type TrackFilter::trackfilter_parse_fix(int* nsats)
{
if (!opt_fix) {
return fix_unknown;
return fix_unknown;
}
-static void
-trackfilter_fill_track_list_cb(const route_head* track) /* callback for track_disp_all */
+void TrackFilter::trackfilter_fill_track_list_cb(const route_head* track) /* callback for track_disp_all */
{
int i;
Waypoint* wpt, *prev;
track_ct++;
}
-static void
-trackfilter_minpoint_list_cb(const route_head* track)
+void TrackFilter::trackfilter_minpoint_list_cb(const route_head* track)
{
int minimum_points = atoi(opt_minpoints);
if (track->rte_waypt_ct < minimum_points) {
* track title producers
*******************************************************************************/
-static void
-trackfilter_split_init_rte_name(route_head* track, const QDateTime& dt)
+void TrackFilter::trackfilter_split_init_rte_name(route_head* track, const QDateTime& dt)
{
QString datetimestring;
}
}
-static void
-trackfilter_pack_init_rte_name(route_head* track, const time_t default_time)
+void TrackFilter::trackfilter_pack_init_rte_name(route_head* track, const time_t default_time)
{
if (strchr(opt_title, '%') != nullptr) {
struct tm tm;
* option "title"
*******************************************************************************/
-static void
-trackfilter_title()
+void TrackFilter::trackfilter_title()
{
int i;
* option "pack" (default)
*******************************************************************************/
-static void
-trackfilter_pack()
+void TrackFilter::trackfilter_pack()
{
int i, j;
trkflt_t prev;
* option "merge"
*******************************************************************************/
-static void
-trackfilter_merge()
+void TrackFilter::trackfilter_merge()
{
int i, j, dropped;
* option "split"
*******************************************************************************/
-static void
-trackfilter_split()
+void TrackFilter::trackfilter_split()
{
route_head* curr;
route_head* master = track_list[0].track;
* option "move"
*******************************************************************************/
-static void
-trackfilter_move()
+void TrackFilter::trackfilter_move()
{
int i;
queue* elem, *tmp;
* options "fix", "course", "speed"
*******************************************************************************/
-static void
-trackfilter_synth()
+void TrackFilter::trackfilter_synth()
{
int i;
queue* elem, *tmp;
* option: "start" / "stop"
*******************************************************************************/
-static time_t
-trackfilter_range_check(const char* timestr)
+time_t TrackFilter::trackfilter_range_check(const char* timestr)
{
int i;
char fmt[20];
return mkgmtime(&time);
}
-static int
-trackfilter_range() /* returns number of track points left after filtering */
+int TrackFilter::trackfilter_range() /* returns number of track points left after filtering */
{
time_t start, stop;
queue* elem, *tmp;
* option "seg2trk"
*******************************************************************************/
-static void
-trackfilter_seg2trk()
+void TrackFilter::trackfilter_seg2trk()
{
int i;
* option "trk2seg"
*******************************************************************************/
-static void
-trackfilter_trk2seg()
+void TrackFilter::trackfilter_trk2seg()
{
int i, first;
route_head* master;
* option: "faketime"
*******************************************************************************/
-typedef struct faketime_s {
- time_t start;
- int step;
- int force;
-} faketime_t;
-
-static faketime_t
-trackfilter_faketime_check(const char* timestr)
+TrackFilter::faketime_t TrackFilter::trackfilter_faketime_check(const char* timestr)
{
int i, j;
char fmtstart[20];
return result;
}
-static int
-trackfilter_faketime() /* returns number of track points left after filtering */
+int TrackFilter::trackfilter_faketime() /* returns number of track points left after filtering */
{
faketime_t faketime;
return track_pts - dropped;
}
-static int
-trackfilter_points_are_same(const Waypoint* wpta, const Waypoint* wptb)
+int TrackFilter::trackfilter_points_are_same(const Waypoint* wpta, const Waypoint* wptb)
{
// We use a simpler (non great circle) test for lat/lon here as this
// is used for keeping the 'bookends' of non-moving points.
(wpta->temperature == wptb->temperature);
}
-static void
-trackfilter_segment_head(const route_head* rte)
+void TrackFilter::trackfilter_segment_head(const route_head* rte)
{
queue* elem, *tmp;
double avg_dist = 0;
* global cb's
*******************************************************************************/
-static void
-trackfilter_init(const char*)
+void TrackFilter::init()
{
+ RteHdFunctor<TrackFilter> trackfilter_segment_head_f(this, &TrackFilter::trackfilter_segment_head);
+ RteHdFunctor<TrackFilter> trackfilter_fill_track_list_cb_f(this, &TrackFilter::trackfilter_fill_track_list_cb);
int count = track_count();
// Perform segmenting first.
if (opt_segment) {
- track_disp_all(trackfilter_segment_head, nullptr, nullptr);
+ track_disp_all(trackfilter_segment_head_f, nullptr, nullptr);
}
if (count > 0) {
/* check all tracks for time and order (except merging) */
- track_disp_all(trackfilter_fill_track_list_cb, nullptr, nullptr);
+ track_disp_all(trackfilter_fill_track_list_cb_f, nullptr, nullptr);
if (need_time) {
qsort(track_list, track_ct, sizeof(*track_list), trackfilter_init_qsort_cb);
}
}
}
-static void
-trackfilter_deinit()
+void TrackFilter::deinit()
{
delete[] track_list;
track_ct = 0;
* trackfilter_process: called from gpsbabel central engine
*******************************************************************************/
-static void
-trackfilter_process()
+void TrackFilter::process()
{
+ RteHdFunctor<TrackFilter> trackfilter_minpoint_list_cb_f(this, &TrackFilter::trackfilter_minpoint_list_cb);
+
int opts, something_done;
if (track_ct == 0) {
return;
}
- trackfilter_deinit(); /* reinitialize */
- trackfilter_init(nullptr);
+ deinit(); /* reinitialize */
+ init();
if (track_ct == 0) {
return; /* no more track(s), no more fun */
return;
}
- trackfilter_deinit(); /* reinitialize */
- trackfilter_init(nullptr);
+ deinit(); /* reinitialize */
+ init();
if (track_ct == 0) {
return; /* no more track(s), no more fun */
return;
}
- trackfilter_deinit(); /* reinitialize */
- trackfilter_init(nullptr);
+ deinit(); /* reinitialize */
+ init();
}
if (opt_trk2seg != nullptr) {
// Performed last as previous options may have created "small" tracks.
if ((opt_minpoints != nullptr) && atoi(opt_minpoints) > 0) {
- track_disp_all(trackfilter_minpoint_list_cb, nullptr, nullptr);
+ track_disp_all(trackfilter_minpoint_list_cb_f, nullptr, nullptr);
}
}
-/******************************************************************************************/
-
-filter_vecs_t trackfilter_vecs = {
- trackfilter_init,
- trackfilter_process,
- trackfilter_deinit,
- nullptr,
- trackfilter_args
-};
-
-/******************************************************************************************/
#endif // FILTERS_ENABLED
--- /dev/null
+/*
+
+ Track manipulation filter
+ Copyright (c) 2009 - 2013 Robert Lipe, robertlipe+source@gpsbabel.org
+ Copyright (C) 2005-2006 Olaf Klein, o.b.klein@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+#ifndef TRACKFILTER_H_INCLUDED_
+#define TRACKFILTER_H_INCLUDED_
+
+#include <QtCore/QDateTime> // for QDateTime
+#include <ctime> // for time_t
+#include "defs.h" // for ARG_NOMINMAX, route_head (ptr only), ARG...
+#include "filter.h" // for Filter
+
+#if FILTERS_ENABLED || MINIMAL_FILTERS
+
+#define TRACKFILTER_PACK_OPTION "pack"
+#define TRACKFILTER_SPLIT_OPTION "split"
+#define TRACKFILTER_SDIST_OPTION "sdistance"
+#define TRACKFILTER_TITLE_OPTION "title"
+#define TRACKFILTER_MERGE_OPTION "merge"
+#define TRACKFILTER_NAME_OPTION "name"
+#define TRACKFILTER_STOP_OPTION "stop"
+#define TRACKFILTER_START_OPTION "start"
+#define TRACKFILTER_MOVE_OPTION "move"
+#define TRACKFILTER_FIX_OPTION "fix"
+#define TRACKFILTER_COURSE_OPTION "course"
+#define TRACKFILTER_SPEED_OPTION "speed"
+#define TRACKFILTER_SEG2TRK_OPTION "seg2trk"
+#define TRACKFILTER_TRK2SEG_OPTION "trk2seg"
+#define TRACKFILTER_SEGMENT_OPTION "segment"
+#define TRACKFILTER_FAKETIME_OPTION "faketime"
+#define TRACKFILTER_DISCARD_OPTION "discard"
+#define TRACKFILTER_MINPOINTS_OPTION "minimum_points"
+
+class TrackFilter:public Filter
+{
+public:
+ arglist_t* get_args() override
+ {
+ return args;
+ }
+ void init() override;
+ void process() override;
+ void deinit() override;
+
+private:
+ char* opt_merge = nullptr;
+ char* opt_pack = nullptr;
+ char* opt_split = nullptr;
+ char* opt_sdistance = nullptr;
+ char* opt_move = nullptr;
+ char* opt_title = nullptr;
+ char* opt_start = nullptr;
+ char* opt_stop = nullptr;
+ char* opt_fix = nullptr;
+ char* opt_course = nullptr;
+ char* opt_speed = nullptr;
+ char* opt_name = nullptr;
+ char* opt_seg2trk = nullptr;
+ char* opt_trk2seg = nullptr;
+ char* opt_segment = nullptr;
+ char* opt_faketime = nullptr;
+ char* opt_discard = nullptr;
+ char* opt_minpoints = nullptr;
+
+ arglist_t args[19] = {
+ {
+ TRACKFILTER_MOVE_OPTION, &opt_move,
+ "Correct trackpoint timestamps by a delta", nullptr, ARGTYPE_STRING,
+ ARG_NOMINMAX, nullptr
+ },
+ {
+ TRACKFILTER_PACK_OPTION, &opt_pack,
+ "Pack all tracks into one", nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ TRACKFILTER_SPLIT_OPTION, &opt_split,
+ "Split by date or time interval (see README)", nullptr,
+ ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+ },
+ {
+ TRACKFILTER_SDIST_OPTION, &opt_sdistance,
+ "Split by distance", nullptr,
+ ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+ },
+ {
+ TRACKFILTER_MERGE_OPTION, &opt_merge,
+ "Merge multiple tracks for the same way", nullptr, ARGTYPE_STRING,
+ ARG_NOMINMAX, nullptr
+ },
+ {
+ TRACKFILTER_NAME_OPTION, &opt_name,
+ "Use only track(s) where title matches given name", nullptr, ARGTYPE_STRING,
+ ARG_NOMINMAX, nullptr
+ },
+ {
+ TRACKFILTER_START_OPTION, &opt_start,
+ "Use only track points after this timestamp", nullptr, ARGTYPE_INT,
+ ARG_NOMINMAX, nullptr
+ },
+ {
+ TRACKFILTER_STOP_OPTION, &opt_stop,
+ "Use only track points before this timestamp", nullptr, ARGTYPE_INT,
+ ARG_NOMINMAX, nullptr
+ },
+ {
+ TRACKFILTER_TITLE_OPTION, &opt_title,
+ "Basic title for new track(s)", nullptr, ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+ },
+ {
+ TRACKFILTER_FIX_OPTION, &opt_fix,
+ "Synthesize GPS fixes (PPS, DGPS, 3D, 2D, NONE)", nullptr,
+ ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+ },
+ {
+ TRACKFILTER_COURSE_OPTION, &opt_course, "Synthesize course",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ TRACKFILTER_SPEED_OPTION, &opt_speed, "Synthesize speed",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ TRACKFILTER_SEG2TRK_OPTION, &opt_seg2trk,
+ "Split track at segment boundaries into multiple tracks",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ TRACKFILTER_TRK2SEG_OPTION, &opt_trk2seg,
+ "Merge tracks inserting segment separators at boundaries",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ TRACKFILTER_SEGMENT_OPTION, &opt_segment,
+ "segment tracks with abnormally long gaps",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ TRACKFILTER_FAKETIME_OPTION, &opt_faketime,
+ "Add specified timestamp to each trackpoint",
+ nullptr, ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+ },
+ {
+ TRACKFILTER_DISCARD_OPTION, &opt_discard,
+ "Discard track points without timestamps during merge",
+ nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ TRACKFILTER_MINPOINTS_OPTION, &opt_minpoints,
+ "Discard tracks with fewer than these points",
+ nullptr, ARGTYPE_INT, "0", "50", nullptr
+ },
+ ARG_TERMINATOR
+ };
+
+ typedef struct trkflt_s {
+ route_head* track;
+ QDateTime first_time;
+ QDateTime last_time;
+ } trkflt_t;
+
+ trkflt_t* track_list = nullptr;
+ int track_ct = 0;
+ int track_pts = 0;
+ int timeless_pts = 0;
+ int opt_interval = 0;
+ int opt_distance = 0;
+ char need_time; /* initialized within trackfilter_init */
+
+ int trackfilter_opt_count();
+ int trackfilter_parse_time_opt(const char* arg);
+ static int trackfilter_init_qsort_cb(const void* a, const void* b);
+ static int trackfilter_merge_qsort_cb(const void* a, const void* b);
+ fix_type trackfilter_parse_fix(int* nsats);
+ void trackfilter_fill_track_list_cb(const route_head* track); /* callback for track_disp_all */
+ void trackfilter_minpoint_list_cb(const route_head* track);
+
+ void trackfilter_split_init_rte_name(route_head* track, const QDateTime& dt);
+ void trackfilter_pack_init_rte_name(route_head* track, const time_t default_time);
+
+ void trackfilter_title();
+
+ void trackfilter_pack();
+
+ void trackfilter_merge();
+
+ void trackfilter_split();
+
+ void trackfilter_move();
+
+ void trackfilter_synth();
+
+ time_t trackfilter_range_check(const char* timestr);
+ int trackfilter_range(); /* returns number of track points left after filtering */
+
+ void trackfilter_seg2trk();
+
+ void trackfilter_trk2seg();
+
+ typedef struct faketime_s {
+ time_t start;
+ int step;
+ int force;
+ } faketime_t;
+
+ faketime_t trackfilter_faketime_check(const char* timestr);
+ int trackfilter_faketime(); /* returns number of track points left after filtering */
+ int trackfilter_points_are_same(const Waypoint* wpta, const Waypoint* wptb);
+
+ void trackfilter_segment_head(const route_head* rte);
+
+};
+
+#endif // FILTERS_ENABLED
+#endif // TRACKFILTER_H_INCLUDED_
#include "defs.h"
#include "filterdefs.h"
+#include "transform.h"
#include <cstdlib>
#if FILTERS_ENABLED
#define MYNAME "transform"
-static char current_target;
-static route_head* current_trk;
-static route_head* current_rte;
-
-static char* opt_routes, *opt_tracks, *opt_waypts, *opt_delete, *rpt_name_digits, *opt_rpt_name;
-static QString current_namepart;
-
-static int name_digits, use_src_name;
-
-static char RPT[] = "RPT";
-
-static
-arglist_t transform_args[] = {
- {
- "wpt", &opt_waypts, "Transform track(s) or route(s) into waypoint(s) [R/T]", nullptr,
- ARGTYPE_STRING, ARG_NOMINMAX, nullptr
- },
- {
- "rte", &opt_routes, "Transform waypoint(s) or track(s) into route(s) [W/T]", nullptr,
- ARGTYPE_STRING, ARG_NOMINMAX, nullptr
- },
- {
- "trk", &opt_tracks, "Transform waypoint(s) or route(s) into tracks(s) [W/R]", nullptr,
- ARGTYPE_STRING, ARG_NOMINMAX, nullptr
- },
- {
- "rptdigits", &rpt_name_digits, "Number of digits in generated names", nullptr,
- ARGTYPE_INT, "2", nullptr, nullptr
- },
- {
- "rptname", &opt_rpt_name, "Use source name for route point names", "N",
- ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- {
- "del", &opt_delete, "Delete source data after transformation", "N",
- ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- },
- ARG_TERMINATOR
-};
-
-static void
-transform_waypoints()
+void TransformFilter::transform_waypoints()
{
route_head* rte;
break;
}
#if NEWQ
- foreach(Waypoint* wpt, waypt_list) {
+ foreach (Waypoint* wpt, waypt_list) {
#else
queue* elem, *tmp;
QUEUE_FOR_EACH(&waypt_head, elem, tmp) {
}
}
-static void
-transform_rte_disp_hdr_cb(const route_head* rte)
+void TransformFilter::transform_rte_disp_hdr_cb(const route_head* rte)
{
current_namepart = RPT;
if (!rte->rte_name.isEmpty() && use_src_name) {
}
}
-static void
-transform_trk_disp_hdr_cb(const route_head* trk)
+void TransformFilter::transform_trk_disp_hdr_cb(const route_head* trk)
{
current_namepart = RPT;
if (!trk->rte_name.isEmpty() && use_src_name) {
}
}
-static void
-transform_any_disp_wpt_cb(const Waypoint* wpt)
+void TransformFilter::transform_any_disp_wpt_cb(const Waypoint* wpt)
{
Waypoint* temp = new Waypoint(*wpt);
if (current_target == 'R') {
}
}
-static void
-transform_routes()
+void TransformFilter::transform_routes()
{
- route_disp_all(transform_rte_disp_hdr_cb, nullptr, transform_any_disp_wpt_cb);
+ WayptFunctor<TransformFilter> transform_any_disp_wpt_cb_f(this, &TransformFilter::transform_any_disp_wpt_cb);
+ RteHdFunctor<TransformFilter> transform_rte_disp_hdr_cb_f(this, &TransformFilter::transform_rte_disp_hdr_cb);
+
+ route_disp_all(transform_rte_disp_hdr_cb_f, nullptr, transform_any_disp_wpt_cb_f);
}
-static void
-transform_tracks()
+void TransformFilter::transform_tracks()
{
- track_disp_all(transform_trk_disp_hdr_cb, nullptr, transform_any_disp_wpt_cb);
+ WayptFunctor<TransformFilter> transform_any_disp_wpt_cb_f(this, &TransformFilter::transform_any_disp_wpt_cb);
+ RteHdFunctor<TransformFilter> transform_trk_disp_hdr_cb_f(this, &TransformFilter::transform_trk_disp_hdr_cb);
+
+ track_disp_all(transform_trk_disp_hdr_cb_f, nullptr, transform_any_disp_wpt_cb_f);
}
/*******************************************************************************
* %%% global callbacks called by gpsbabel main process %%% *
*******************************************************************************/
-static void
-transform_init(const char*)
-{
-}
-
-static void
-transform_deinit()
-{
-}
-
-static void
-transform_process()
+void TransformFilter::process()
{
int delete_after = (opt_delete && (*opt_delete == '1')) ? 1 : 0;
}
}
-/*******************************************************************************/
-
-filter_vecs_t transform_vecs = {
- transform_init,
- transform_process,
- transform_deinit,
- nullptr,
- transform_args
-};
-
-/*******************************************************************************/
-
#endif // FILTERS_ENABLED
--- /dev/null
+/*
+
+ Transformation filter for GPS data.
+
+ Copyright (C) 2006 Olaf Klein, o.b.klein@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef TRANSFORM_H_INCLUDED_
+#define TRANSFORM_H_INCLUDED_
+
+#include <QtCore/QString> // for QString
+#include "defs.h" // for route_head (ptr only), ARG_NOMINMAX, ARGTY...
+#include "filter.h" // for Filter
+
+#if FILTERS_ENABLED
+
+class TransformFilter:public Filter
+{
+public:
+ arglist_t* get_args() override
+ {
+ return args;
+ }
+ void process() override;
+
+private:
+ char current_target;
+ route_head* current_trk;
+ route_head* current_rte;
+
+ char* opt_routes, *opt_tracks, *opt_waypts, *opt_delete, *rpt_name_digits, *opt_rpt_name;
+ QString current_namepart;
+
+ int name_digits, use_src_name;
+
+ const QString RPT = "RPT";
+
+ arglist_t args[7] = {
+ {
+ "wpt", &opt_waypts, "Transform track(s) or route(s) into waypoint(s) [R/T]", nullptr,
+ ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+ },
+ {
+ "rte", &opt_routes, "Transform waypoint(s) or track(s) into route(s) [W/T]", nullptr,
+ ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+ },
+ {
+ "trk", &opt_tracks, "Transform waypoint(s) or route(s) into tracks(s) [W/R]", nullptr,
+ ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+ },
+ {
+ "rptdigits", &rpt_name_digits, "Number of digits in generated names", nullptr,
+ ARGTYPE_INT, "2", nullptr, nullptr
+ },
+ {
+ "rptname", &opt_rpt_name, "Use source name for route point names", "N",
+ ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "del", &opt_delete, "Delete source data after transformation", "N",
+ ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ ARG_TERMINATOR
+ };
+
+ void transform_waypoints();
+ void transform_rte_disp_hdr_cb(const route_head* rte);
+ void transform_trk_disp_hdr_cb(const route_head* trk);
+ void transform_any_disp_wpt_cb(const Waypoint* wpt);
+ void transform_routes();
+ void transform_tracks();
+
+};
+
+#endif // FILTERS_ENABLED
+#endif // TRANSFORM_H_INCLUDED_
#include "defs.h"
#include "filterdefs.h"
+#include "validate.h"
#include <cstdio>
#if FILTERS_ENABLED
#define MYNAME "validate"
-static char* opt_debug;
-static bool debug;
-static char* opt_checkempty;
-static bool checkempty;
-static unsigned int point_ct;
-static unsigned int head_ct;
-static unsigned int segment_ct_start;
-static const char* segment_type;
-
-static
-arglist_t validate_args[] = {
- {
- "checkempty", &opt_checkempty, "Check for empty input",
- "0", ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- } ,
- {
- "debug", &opt_debug, "Output debug messages instead of possibly issuing a fatal error",
- "0", ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
- } ,
- ARG_TERMINATOR
-};
-
-
-static void validate_head(const route_head*)
+void ValidateFilter::validate_head(const route_head*)
{
head_ct += 1;
segment_ct_start = point_ct;
}
-static void validate_head_trl(const route_head* header)
+void ValidateFilter::validate_head_trl(const route_head* header)
{
int segment_waypt_ct = point_ct - segment_ct_start;
if (debug) {
}
}
-static void validate_point(const Waypoint*)
+void ValidateFilter::validate_point(const Waypoint*)
{
point_ct += 1;
}
-static void
-validate_process()
+void ValidateFilter::process()
{
+ WayptFunctor<ValidateFilter> validate_point_f(this, &ValidateFilter::validate_point);
+ RteHdFunctor<ValidateFilter> validate_head_f(this, &ValidateFilter::validate_head);
+ RteHdFunctor<ValidateFilter> validate_head_trl_f(this, &ValidateFilter::validate_head_trl);
debug = *opt_debug == '1';
checkempty = *opt_checkempty == '1';
if (debug) {
fprintf(stderr, "\nProcessing waypts\n");
}
- waypt_disp_all(validate_point);
+ waypt_disp_all(validate_point_f);
if (debug) {
fprintf(stderr, "point ct: %u, waypt_count: %u\n", point_ct, waypt_count());
}
if (debug) {
fprintf(stderr, "\nProcessing routes\n");
}
- route_disp_all(validate_head, validate_head_trl, validate_point);
+ route_disp_all(validate_head_f, validate_head_trl_f, validate_point_f);
if (debug) {
fprintf(stderr, "route head ct: %u, route_count: %u\n", head_ct, route_count());
fprintf(stderr, "total route point ct: %u, route_waypt_count: %u\n", point_ct, route_waypt_count());
if (debug) {
fprintf(stderr, "\nProcessing tracks\n");
}
- track_disp_all(validate_head, validate_head_trl, validate_point);
+ track_disp_all(validate_head_f, validate_head_trl_f, validate_point_f);
if (debug) {
fprintf(stderr, "track head ct: %u, track_count: %u\n", head_ct, track_count());
fprintf(stderr, "total track point ct: %u, track_waypt_count: %u\n", point_ct, track_waypt_count());
}
}
-filter_vecs_t validate_vecs = {
- nullptr,
- validate_process,
- nullptr,
- nullptr,
- validate_args
-};
-
#endif
--- /dev/null
+/*
+
+ validate internal data structures.
+
+ Copyright (C) 2013 Robert Lipe robertlipe+source@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+*/
+
+#ifndef VALIDATE_H_INCLUDED_
+#define VALIDATE_H_INCLUDED_
+
+#include "defs.h" // for route_head (ptr only), ARGTYPE_BOOL, ARG_NOMINMAX
+#include "filter.h" // for Filter
+
+#if FILTERS_ENABLED
+
+class ValidateFilter:public Filter
+{
+public:
+ arglist_t* get_args() override
+ {
+ return args;
+ }
+ void process() override;
+
+private:
+ char* opt_debug;
+ bool debug;
+ char* opt_checkempty;
+ bool checkempty;
+ unsigned int point_ct;
+ unsigned int head_ct;
+ unsigned int segment_ct_start;
+ const char* segment_type;
+ arglist_t args[3] = {
+ {
+ "checkempty", &opt_checkempty, "Check for empty input",
+ "0", ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ {
+ "debug", &opt_debug, "Output debug messages instead of possibly issuing a fatal error",
+ "0", ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+ },
+ ARG_TERMINATOR
+ };
+
+ void validate_head(const route_head*);
+ void validate_head_trl(const route_head* header);
+ void validate_point(const Waypoint*);
+
+};
+
+#endif
+#endif // VALIDATE_H_INCLUDED_
fflush(stdout);
}
-void
-waypt_disp_all(waypt_cb cb)
-{
- waypt_disp_session(nullptr, cb);
-}
-
-void
-waypt_disp_session(const session_t* se, waypt_cb cb)
-{
- int i = 0;
-#if NEWQ
- foreach(Waypoint* waypointp, waypt_list) {
-#else
- queue* elem, *tmp;
- Waypoint* waypointp;
- QUEUE_FOR_EACH(&waypt_head, elem, tmp) {
- waypointp = (Waypoint*) elem;
-#endif
- if ((se == nullptr) || (waypointp->session == se)) {
- if (global_opts.verbose_status) {
- i++;
- waypt_status_disp(waypt_count(), i);
- }
- (*cb)(waypointp);
- }
- }
- if (global_opts.verbose_status) {
- fprintf(stdout, "\r\n");
- }
-}
-
void
waypt_init_bounds(bounds* bounds)
{